什么时候f:param实际发送?

时间:2011-11-22 12:21:16

标签: jsf parameters jsf-1.2

我有以下h:commandButton

<h:commandButton action="#{myBean.myAction}" value="Send">
    <f:param name="myFlag" value="true" />
</h:commandButton>

我希望获得myFlag访问Validator的权限,该FacesContext附加到f:validator的其他元素。

不幸的是,当我想通过{{3}}检索参数时,我只会返回null

只有在调用了所有验证器后才会发送参数吗?

1 个答案:

答案 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']}" />

另见: