Как вызвать командную кнопку без проверки всех необходимых входов?
Я пытаюсь сделать перенаправление с index.xhtml на registerFirstTime.xhtml.
Код на странице index.xhtml:
<h:form id="content" style="margin-top: 1em;">
<p:panel id="panel" header="LOGIN">
<p:messages id="msgs" globalOnly="true"/>
<h:panelGrid columns="3">
<h:outputLabel value="e-mail" />
<p:inputText id="name" required="true" value="#{UserBean.email}"
requiredMessage="Required: e-mail" display="icon">
</p:inputText>
<p:message id="msgName" for="name"/>
<h:outputLabel value="Password" />
<p:password id="password" required="true" value="#{UserBean.password}"
requiredMessage="Required: Password" display="icon" feedback="false">
</p:password>
<p:message id="msgPassword" for="password"/>
</h:panelGrid>
<h:panelGrid columns="2">
<p:commandButton value="Login" actionListener="#{UserBean.validate}" update="msgNombre, msgPassword, msgs"/>
<h:commandButton value="Register for the first time" action="register"/>
</h:panelGrid>
</p:panel>
</h:form>
В то время как содержимое перенаправления в Face-config.xml:
<navigation-rule>
<from-view-id>index.xhtml</from-view-id>
<navigation-case>
<from-outcome>register</from-outcome>
<to-view-id>registerFirstTime.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Пока введенные имя и пароль не заполнены, вы не сможете выполнить перенаправление. Как я могу сделать перенаправление записи без учета обязательных полей? Спасибо! знак равно
2 ответа
Добавлять immediate="true"
на командную кнопку, которая должна пропустить обработку всех полей ввода, которые не имеют immediate="true"
приписывать.
<h:commandButton value="Register for the first time" action="register" immediate="true" />
Не имеет отношения к конкретной проблеме, обратите внимание, что технически вы не отправляете перенаправление сюда. Это в основном отправляет вперед, то есть URL в адресной строке браузера остается URL страницы входа в систему. Вам нужно добавить <redirect/>
к <navigation-case>
, Также обратите внимание, что навигационные случаи являются остатком JSF 1.x. Начиная с JSF 2.x вы можете выполнять "неявную навигацию", в которой вы просто указываете идентификатор представления в качестве результата.
<h:commandButton value="Register for the first time" action="registerFirstTime?faces-redirect=true" immediate="true" />
Таким образом, вы можете избавиться от случая навигации в целом.
Решение @BalusC, как всегда, должно помочь. Но я хотел бы отметить пару вещей, поскольку вы, кажется, используете Primefaces. Оба не имеют отношения к вопросу, но могут помочь вам в какой-то момент.
Во-первых, вы можете использовать неявную навигацию (введено в JSF2). Таким образом, вам не нужно будет определять все правила навигации в вашем файле face-config.xml (я работаю над старым проектом JSF 1.2 и ненавижу необходимость определять роли навигации для всего). Вот как вы это сделаете:
<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true"/>
Параметр Face-Redirect форсирует перенаправление вместо форварда, если вам это нужно.
Также, скажем, вы хотите правильно обработать некоторые значения, но не все. В этом случае вы можете использовать атрибут процесса p: commandButton или p: ajax. Например
<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true" process="@this, name"/>
Это заставит JSF обрабатывать только кнопку (@this) и компонент с id="name" (поле вашей электронной почты). Опять же, это, вероятно, не относится к этому вопросу, но это то, что я часто использую.