我有以下h:commandButton
:
<h:commandButton action="#{myBean.myAction}" value="Send">
<f:param name="myFlag" value="true" />
</h:commandButton>
我希望获得myFlag
访问Validator的权限,该FacesContext附加到f:validator
的其他元素。
不幸的是,当我想通过{{3}}检索参数时,我只会返回null
。
只有在调用了所有验证器后才会发送参数吗?
答案 0 :(得分:2)
<f:param>
内部<h:commandButton>
仅支持JSF 2.0,但您使用的是JSF 1.2。然后,只有<f:param>
支持<h:commandLink>
。
<h:commandLink action="#{myBean.myAction}" value="Send">
<f:param name="myFlag" value="true" />
</h:commandLink>
还有其他替代方案,例如<h:inputHidden>
或<f:setPropertyActionListener>
或<f:attribute>
,或者在这种情况下可能只是普通<input type="hidden">
(隐藏的输入组件和动作监听器只会在更新模型值期间设置它们的值,该值晚于验证阶段;最好在调用验证器的组件上设置属性标记。由于功能要求尚不清楚,因此不可能提出最佳选择。
更新,显然您需要知道的是,是否按下了特定按钮;在这种情况下,只需给它和父表格一个固定的ID
<h:form id="form">
<h:commandButton id="send" ...>
这样它的固定请求参数名称为form:send
,你可以在验证器中检查它:
if (externalContext.getRequestParameterMap().containsKey("form:send")) {
// Send button is pressed.
}
您还可以在required
验证器中检查,如下所示:
<h:inputText ... required="#{not empty param['form:send']}" />