Ответ 1
почему этот вопрос не был дан ответ?
как @BalusC сказал, ответ прост, просто поместите @process="this"
<h:form>
<p:wizard id="wizard" showNavBar="false" widgetVar="wizardWV">
<p:tab id="tab0" title="Tab 0">
<p:panel header="Panel for tab 0">
blablabla
</p:panel>
</p:tab>
<p:tab id="tab1" title="Tab 1">
<p:panel header="Panel for tab 1">
<p:message for="year" />
<br />
<h:panelGrid columns="2">
<h:outputLabel value="Year: " />
<p:inputMask id="year" value="#{myBean.year}" required="true"
requiredMessage="Year is required!" style="width:70px;" mask="9999"
maxlength="4" />
</h:panelGrid>
</p:panel>
</p:tab>
<p:tab id="tab2" title="Tab 2">
<p:panel header="Panel for tab 2">
blablabla
</p:panel>
</p:tab>
</p:wizard>
<p:commandButton value="Back" onclick="PF('wizardWV').back();" />
<p:commandButton process="@this" value="Next" onclick="PF('wizardWV').next();" />
</h:form>
или лучше, чтобы избежать дублирования запроса ajax
<p:commandButton type="button" value="Back" onclick="PF('wizardWV').back();" />
<p:commandButton type="button" value="Next" onclick="PF('wizardWV').next();" />
но я действительно не вижу смысла использовать пользовательскую панель навигации для мастера в этом случае.
если вы имеете в виду "скин", указав "дизайн", правильный подход заключается в переопределении стилей PF CSS:
Wizard resides in a container element that style and styleClass attributes apply.
Following is the list of structural css classes.
Selector Applies
.ui-wizard Main container element.
.ui-wizard-content Container element of content.
.ui-wizard-step-titles Container of step titles.
.ui-wizard-step-title Each step title.
.ui-wizard-navbar Container of navigation controls.
.ui-wizard-nav-back Back navigation control.
.ui-wizard-nav-next Forward navigation control.
Но если вы действительно имеете в виду "дизайн", предназначенный как функции/функциональные возможности, да, вы можете взаимодействовать с мастером с помощью своего "виджета" и, как и вы, определять свои собственные элементы управления. В вашем конкретном случае я не вижу разницы в "дизайне", я вижу стандартное поведение компонента мастера, где обрабатывается текущая вкладка мастера (и все ее компоненты проверены) при нажатии следующей кнопки.
Проверка обрабатывается ТОЛЬКО для обработанных компонентов (которые находятся внутри списка выполнения), и вы можете управлять этим списком с помощью атрибута process="..."
любого компонента/события ajax.
Вероятно, вам нужно изменить поведение по умолчанию другого компонента на той странице, на которой обрабатываются @all
или @form
.
Из того, что вы говорите в своем комментарии, у вас есть хотя бы один компонент на этой странице, который имеет поведение ajax, например, p:autocomplete
и, возможно, вы используете PF < 4.0.
В этом случае вы можете добавить process="@this"
в p:autocomplete
, чтобы предотвратить обработку (а затем проверку) других компонентов на вкладке мастера, например, ваш p:inputMask
.
@Erick, первое, что приходит мне в голову, это:
<p:wizard binding="#{wizardComponent}" ...>
<p:tab id="tab0" ...>
...
</p:tab>
...
</p:wizard>
<p:commandButton rendered="#{wizardComponent.step != 'tab0'}" value="Back" onclick="PF('wizardWV').back();" />