h:按钮没有从JSF组件传递f:param

时间:2014-04-05 18:54:37

标签: jsf param

我有一个<h:button>的JSF 2页面。我想将两个<f:param>传递给结果页面。

<f:param> pOne的值来自页面bean <f:param> pTwo的值来自页面上的输入字段。

p两个值存储在页面bean上 当用户点击同一页面内的图像地图时,pWwo的输入字段值由javascript设置。

问题是请求为param pTwo传递了null。

如果我将pTwo的值设置为静态值,值=&#34; 12345&#34;,则传递12345。

那么,为什么<f:param>没有从源页面传递输入字段的值?

谢谢!

<input type="text" id="pTwo"/> <h:button value="Go" outcome="destPage"> <f:param name="pOne" value=#{myBean.pOne}"/> <f:param name="pTwo" value=#{pTwo}"/> </h:button>

2 个答案:

答案 0 :(得分:1)

您不能像这样在EL表达式中引用输入字段的值。即使您使用h:inputText也不会。

此外,JSF计算按钮的链接,包括在服务器端呈现页面时的参数。因此,当用户看到页面并在输入字段中输入内容时,链接的URL已经修复且不会更改。

要以类似的方式解决此问题,您可以使用h:commandButton代替h:button,使用pTwo提交包含h:inputText值的表单并返回重定向新页面。对此的XHTML可能如下所示:

<h:form>
  <h:inputText value="#{bean.pTwo}"/>
  <h:commandButton action="#{bean.goToDest}" value="Go"/>
</h:form>

引用的操作方法可能如下所示:

public String goToDest() {
  return "destPage?faces-redirect=true&pOne=" + pOne + "&pTwo=" + pTwo;
}

答案 1 :(得分:0)

尝试使用以下代码:

<h:commandButton action="#{bean.goToDest}" value="Go" >
   <f:setPropertyActionListener target="#{yourDestinyManagedBean.pOne}" value="#{yourManagedBean.pOne}" />
   <f:setPropertyActionListener target="#{youDestinyManagedBean.pTwo}" value="#{yourManagedBean.pTwo}" />
</h:commandButton>

您可以看到示例here