gpt4 book ai didi

validation - 如何让验证取决于按下的按钮?

转载 作者:行者123 更新时间:2023-12-02 22:48:32 24 4
gpt4 key购买 nike

我已经创建了表单,并且想在创建新表时在表上显示以前的现有项。我想在表单填写时显示匹配项。但是,当我尝试在未完成表单的情况下过滤列表时,将显示验证消息,并且该表未更新。

不知道是否有可能,但是我想做这样的事情:

<h:form id="form">

<h:outputText value="Name: "/>
<p:inputText value="#{itemsBean.name}" id="name" required="true"/>
<br/>
<h:outputText value="Description: "/>
<p:inputText value="#{itemsBean.description}" id="description" required="true"/>

<p:commandButton value="Save" update="form" actionListener="#{itemsBean.save}"/> //validate and save
<p:commandButton value="Filter" update="form" actionListener="#{itemsBean.updateItemsList}"/> //don't validate, and update the table.

<p:dataTable id="list" value="#{itemsBean.itemsList}" var="item">
<p:column>
<h:outputText value="#{item.name}"/>
</p:column>
<p:column>
<h:outputText value="#{item.description}"/>
</p:column>
</p:dataTable>

</h:form>

我是JSF的新手。

最佳答案

我了解您要根据name输入字段进行过滤。 <p:commandButton>默认发送ajax请求,并具有process属性,您可以在其中指定要在提交期间处理的组件。在您的特定情况下,然后应只处理,name输入字段和当前按钮(以便调用其操作)。

<p:commandButton process="@this name" ... />
process属性可以采用空格分隔的组件(相对)客户端ID集合,其中 @this引用当前组件。在 <p:commandButton>@form(涵盖当前表单的所有输入字段和按下的按钮)的情况下,默认情况下,这就是为什么在初次尝试时都对它们进行了验证的原因。在上面的示例中,所有其他输入字段都不会被处理(因此也不会得到验证)。
但是,如果您打算在每次按下有问题的按钮时跳过所有字段的 required验证,以便最终可以处理不必全部填写的多个字段,则需要将 required="true"设置为有条件的而是检查按钮是否被按下。例如,仅当按下保存按钮时,才让它评估 true:
<p:inputText ... required="#{not empty param[save.clientId]}" />
...
<p:inputText ... required="#{not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" value="Save" ... />
这样,当按下其他按钮时,它将不会被验证为 required="true"。上面示例中的技巧是,已按下按钮的名称(本质上是客户端ID)作为请求参数发送,您可以仅在请求参数映射中检查其名称。
也可以看看:
  • Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes
  • 关于validation - 如何让验证取决于按下的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8370675/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com