Мастер, перейдите на вкладку и перенаправьте на нее

#primefaces #wizard

Вопрос:

Я работаю с мастером в простых шрифтах, поведение обычное, несколько вкладок, нажмите «Далее», чтобы перейти к следующему, нажмите «Назад», чтобы вернуться, onflowproces и т. Д. Проблема в том, что в некоторых случаях вы можете войти на страницу в режиме только для чтения, и так как в этом случае нет необходимости проходить каждый отдельный шаг, чтобы достичь определенного шага, я хочу найти способ щелкнуть на вкладке и перенаправить.

Мастер состоит из 8 вкладок, к каждой вкладке можно получить доступ, добавив идентификатор вкладки в параметр url, единственное, что мне нужно сделать, это найти способ щелкнуть вкладку и перенаправить на URL вкладки.

Есть ли способ достичь этого? Спасибо!

Комментарии:

1. Версия PF? Если вы свяжете step="#{bean.mystep} , то сможете изменить значение на стороне сервера и, обновив мастер, сразу перейдете к этому шагу.

2. спасибо за ответ, я работаю с примерами 6.2. Если я не понял вас неправильно, то, что вы говорите, у меня уже есть, мне нужно щелкнуть вкладку и перенаправить на нее. Часть, которой мне не хватает, — это та, которая «преобразует» вкладку в кнопку

Ответ №1:

Чтобы сделать имя мастера ссылкой на их вкладку, я переопределяю WizardRenderer следующим образом:

     package myImportantPackage;  
 
    import java.io.IOException;

    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;

    import org.primefaces.component.tabview.Tab;
    import org.primefaces.component.wizard.Wizard;
 
  
    public class WizardRenderer extends org.primefaces.component.wizard.WizardRenderer {
             
            @Override
            protected void encodeStepStatus(FacesContext context, Wizard wizard) throws IOException {
                ResponseWriter writer = context.getResponseWriter();
                String currentStep = wizard.getStep();
                boolean currentFound = false;
         
                writer.startElement("ul", null);
                writer.writeAttribute("class", Wizard.STEP_STATUS_CLASS   " wizard-panels", null);
                int i = 0;
                for(UIComponent child : wizard.getChildren()) {
                    if(child instanceof Tab amp;amp; child.isRendered()) {
                        Tab tab = (Tab) child;
                        boolean active = (!currentFound) amp;amp; (currentStep == null || tab.getId().equals(currentStep));
                        String titleStyleClass = active ? Wizard.ACTIVE_STEP_CLASS : Wizard.STEP_CLASS;
                        if(tab.getTitleStyleClass() != null) {
                            titleStyleClass = titleStyleClass   " "   tab.getTitleStyleClass();
                        }
                         
                        if(active) {
                            currentFound = true;
                        }
         
                        writer.startElement("li", null);
                        writer.writeAttribute("class", titleStyleClass, null);
                        if(tab.getTitleStyle() != null) writer.writeAttribute("style", tab.getTitleStyle(), null);
                         
                        writer.startElement("a", null);
                        final String wiz = wizard.resolveWidgetVar();
                        writer.writeAttribute("href", "javascript:PF('" wiz "').loadStep(PF('" wiz "').cfg.steps[" i "], false)", null);
                        if (tab.getTitletip() != null) writer.writeAttribute("title", tab.getTitletip(), null);
                        writer.write(tab.getTitle());
                        writer.endElement("a");
                         
                        writer.endElement("li");
                        i  ;
                    }
                }
         
                writer.endElement("ul");
            }    
        }
 

И зарегистрировал его faces-config.xml , вот так

 <renderer>
    <component-family>org.primefaces.component</component-family>
    <renderer-type>org.primefaces.component.WizardRenderer</renderer-type>
    <renderer-class>myImportantPackage.WizardRenderer</renderer-class>
</renderer>
 

Комментарии:

1. Эй, ты потрясающая, это работает!! Большое вам спасибо!