【问题标题】:CommandButton that checks some required fields but not all of them [duplicate]命令按钮检查一些必填字段但不是全部[重复]
【发布时间】:2015-12-21 08:52:04
【问题描述】:

我正在尝试做类似的事情:

<h:form id="form">
    <p:inputText id="input1" value="#{mb.input}" required="true" /><br />
    <h:panelGroup id="panelGroup"><br />
        <p:inputText id="input2" required="true" /><br />
        <p:commandButton id="doSomething" value="something" action="#{mb.doSomething}" />
    </h:panelGroup><br />
    <p:commandButton id="save" value="Save" action="#{mb.save}" /><br />
</h:form>

这是我的问题:当我点击save 按钮时,我希望在required="true" 的位置验证整个表单(对于input1input2,都可以正常工作)。

但是,当我点击doSomething 按钮时,我希望它只检查input2 是否已填充,而忽略input1 的条件(换句话说:如果input2 为空,则它不应该工作但即使input1 应该也可以工作)。有没有办法做到这一点? (而且我不能为此使用托管 Bean!)

【问题讨论】:

    标签: validation jsf primefaces commandbutton


    【解决方案1】:

    像这样使用&lt;p:commandButton&gt;process属性

    <p:commandButton id="doSomething" value="something" action="#{mb.doSomething}"  process="input2"/>
    

    这样它只会在点击时验证 input2。根据 Primefaces 文档:

    过程 |空 |字符串 |要部分处理而不是处理的组件 全景。

    【讨论】:

    • 是的!有效!我只想在您的答案中补充一点,它只使 input2 组件工作,而不是按钮本身(这是一个问题,因为它应该做一些其他事情,至少在我的情况下)。最后的进程标签必须是:process="input2, doSomething"
    • Denis Klein,您在评论中说,当您单击doSomething 按钮时,您需要在提交中发送input1。那么接受的答案将无法满足您的要求。你能澄清一下吗?
    • 伙计,非常抱歉,我想我在回答这个问题时只是感到困惑......这不是我的意思:doSomething 需要检查input2,而不是input1
    【解决方案2】:

    仅将 immediate="true" 属性放在面板内的两个组件上。或者您也可以使用 Ajax 作为面板内的按钮,仅发送面板内容。

    注意 1:面板内的输入声明了 value 属性。

    注意 2:还包括两个按钮的 update 属性。即:

        update="@form"
    

    注意 3:您也可以在表单中包含 &lt;p:messages/&gt; 元素。

    【讨论】:

    • 当按下Save 按钮时,此解决方案是否会验证input2 字段?
    • 会的。它将验证两个输入。
    • Denis Klein,单击doSomething 按钮时是否需要在请求中输入input1 值?如果是,那么 Ajax 解决方案将无济于事。无论如何,如果验证要求变得复杂,您最好在支持 bean 方法中管理验证,并自己生成相应的验证消息。
    • @BalusC plaese,你能告诉我一些关于这种行为的事情吗:当我将即时属性放在面板内的两个组件中时,支持 bean 方法执行,然后检查验证,如果它失败显示消息。因此,如果您在按下“doSomething”按钮时需要执行支持 bean 方法,那么“即时属性”解决方案将无效。
    • 您的第一个想法在这里行不通:它没有正确考虑要求...对于面板想法内的按钮的 Ajax,我不明白您的意思:您会介意给我看一下代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2012-12-24
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多