如何从复合组件中跳过表单验证

时间:2013-05-08 12:48:58

标签: jsf jsf-2 primefaces

我有一个复合组件供用户确认删除操作。但问题是当用户点击“是”时,程序会尝试在我的表单中验证其他输入字段。我认为直接属性不起作用。如何跳过表单中的其他输入字段?

我的观点;

<h:form>
<p:commandButton id="myButtonId" onclick="deleteDialog.show();" icon="ui-icon-trash" title="Delete"/>
//someinputfields and validators
<bzn:deleteConfirmDialog actionListener="#{addressBookController.deleteParty()}">
        </bzn:deleteConfirmDialog>

    </h:form>

这是我的复合组件;

<composite:interface>       

    <composite:attribute name="actionListener" 
                         method-signature="java.lang.String action()" />

</composite:interface>

<composite:implementation>

    <p:dialog id="deleteDialogId"                  
              widgetVar="deleteDialog"
              resizable="false"
              height="100"
              width="250"
              >
        <p:outputPanel>                
            <center>
                <p:commandButton value="Yes" immediate="true"
                                 actionListener="#{cc.attrs.actionListener}"
                                 oncomplete="deleteDialog.hide();"/>
                <p:commandButton value="No" oncomplete="deleteDialog.hide();"/>
            </center>
        </p:outputPanel>

    </p:dialog>

</composite:implementation>

1 个答案:

答案 0 :(得分:2)

属于一个表单的所有输入/按钮必须放在自己的<h:form>中。

换句话说,不要使用“上帝”形式。给对话框提供自己的<h:form>(并确保它没有嵌套在另一个<h:form>中)。

基本上,

<h:form>
    ...
</h:form>

<p:dialog>
    <h:form>
        ...
    </h:form>
</p:dialog>

请注意,这与复合组件有 nothing 。在SSCCE风格(which you should preferably already have done before posting the question)的一个视图中将所有内容放在一起时,您会遇到完全相同的问题。

顺便说一下,自1998年HTML 4.01以来,<center>元素已被弃用。我不确定你在哪里学习HTML,但我建议寻找最新的资源,最好不要超过〜3年