忽略commandButton上的验证

时间:2012-08-08 11:14:55

标签: jsf primefaces

我有编辑某个实体的页面。该页面有两个命令按钮。一个是“后退”,一个是“保存”,并且在该页面上我还有输入字段(idInputSubject)。其中一些是必需的,一些不是。

如何确保按“后退”按钮(取消编辑并返回)验证将被忽略,现在情况并非如此。现在,当我按下“返回”或“保存”按钮时,如果我没有填写正确的值(idInputSubject),则会显示验证消息。

“后退”和“保存”按钮的形式相同:

<h:form id="idFormMeasureDetail" styleClass="bodyForm" prependId="false">
   ...
   <p:commandButton value="#{contentMB.msg.label_back.value}"
        action="#{chooseMeasureControllerMB.aSearch}"
        rendered="#{detailMeasureMB.navigation eq 0}" ajax="false"
        icon="ui-icon-arrowreturnthick-1-w"/>
   <p:commandButton value="#{contentMB.msg.button_save.value}" ajax="false" 
        icon="ui-icon-disk" actionListener="#{detailMeasureControllerMB.alApplyChanges}" 
                    title="#{contentMB.msg.tip_Apply.value}" />

   ...
   <p:inputTextarea id="idInputSubject" value="#{detailMeasureMB.measure.aufgabe}"
    readonly="#{!userSessionMB.supervisor and !detailMeasureMB.isCreator}"
    required="#{globalSessionMB.globalWebOptionsMap['MMRequiredSubject'].propvalue}"
            title="#{contentMB.msg.tip_Betreff.value}"
            autoResize="false" style="width:100%;" >
   </p:inputTextarea>
   <p:message id="inputSubjectMsg" for="idInputSubject" display="icon" />
   ...

</h:form>

ChooseMeasureControllerMB:

@ManagedBean(name = "chooseMeasureControllerMB")
@RequestScoped
public class ChooseMeasureControllerMB extends BaseMeasureControllerMB {
...
public String aSearch() {
            ...
    // navigate to target-page
    return "/pages/mm/showMeasuresList.xhtml?faces-redirect=true";
}
...
}

2 个答案:

答案 0 :(得分:15)

如果您想要在某些按钮上使用

进行防止/跳过验证 关于该特定按钮的

immediate="true"

有关immediate="true"阅读following BalusC answer

的详细解释

And here a nice diagram that shows how imemdiate="true works"

答案 1 :(得分:0)

简而言之,当您点击“后退”按钮时,您需要提交表单并验证数据。要防止这种情况,请将按钮放在另一个表单中,或使用Java脚本进行导航。

通常,当您要取消操作时,您不想提交数据,因为它将被丢弃。使用一些客户端操作。我认为您还可以使用<p:commandButton><p:button>进行导航。这样,表格也不会提交。