#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. Эй, ты потрясающая, это работает!! Большое вам спасибо!