3 回答
TA贡献1785条经验 获得超4个赞
我知道你想根据name
输入字段进行过滤。在<p:commandButton>
默认情况下,发送一个Ajax请求,并且具有process
属性,其中可以指定要在提交处理的组件。在您的特定情况下,您应该只处理name
输入字段和当前按钮(以便调用其操作)。
<p:commandButton process="@this name" ... />
该process
属性可以采用空间分隔的组件的(相对)客户端ID集合,其中@this
引用当前组件。它默认为<p:commandButton>
to @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)已作为请求参数发送,您可以在请求参数映射中检查其存在。
也可以看看:
TA贡献1856条经验 获得超11个赞
除了BalusC的答案(非常有用和完整),我想补充一点,当你使用<h:commandButton />
它时,它将验证(必需的,自定义验证)<h:form />
命令按钮所在位置的所有字段,因此当你需要使用多个字段时在命令按钮中,您可以认为使用不同<h:form />
的不同职责来避免命令按钮的提交操作中的意外行为是一种很好的做法。在BalusC的答案中很好地解释了:JSF页面中的多个h:表单
如果您的表单有验证而且您没有更新<h:form />
或者您没有显示消息,那么您可能会头疼,认为<h:commandButton />
未触发您的操作,但可能是未显示的验证问题。
TA贡献1893条经验 获得超10个赞
我用非ajax提交测试了这个:
<p:inputText ... required="#{not empty param.includeInSave1}" />...<p:inputText ... required="true" />...<p:commandButton value="Save1" ajax="false"> <f:param name="includeInSave1" value="true" /></p:commandButton><p:commandButton value="Save2" ajax="false" />
只有在Save1按钮提交时才需要验证第一个输入。
添加回答
举报