不是JSF中的有效方法表达式

时间:2012-12-15 22:28:37

标签: jsf

我有一个命令按钮,我想用它来导航到另一个jsf facelet,但我得到一个不是有效的方法表达式:

 <h:commandButton value="Save Edits" action="editOrDeletePage.xhtml?editing=true;#{product.id};name=#{product.productName};description=#{product.description};quantity=#{product.quantity}"/>

如果我只有

,我可以让它工作
action="editOrDeletePage.xhtml?editing=true"

我想当我有多个属性正在传递时,我并没有正确划分它们。有什么想法吗?

2 个答案:

答案 0 :(得分:8)

action属性包含EL表达式时,它被解释为方法表达式。因此,当您使用action="#{bean.someMethod}"时,它才真正有效。但是,您的尝试不代表有效的方法表达式,而是表示action属性不接受的值表达式。

如果您打算将其他请求/视图参数附加到表单提交,那么您应该使用<f:param>

<h:commandButton value="Save Edits" action="editOrDeletePage.xhtml">
    <f:param name="editing" value="true" />
    <f:param name="id" value="#{product.id}" />
    <f:param name="name" value="#{product.productName}" />
    <f:param name="description" value="#{product.description}" />
    <f:param name="quantity" value="#{product.quantity}" />
</h:commandButton>

请注意,这些参数不会在请求URL中结束(正如您在浏览器地址栏中看到的那样),并且您的理论方法也不会这样做,JSF命令按钮即生成HTML {{1提交到父HTML <input type="submit">的{​​{1}}属性中指定的相同URL的元素。

另请注意,在表单提交期间,但在显示表单期间,不会评估这些参数。如果你打算按照这种方式传递提交的值,那么你基本上做错了。您可能希望将它们指定为视图参数,以便可以使用action作为操作。

毕竟,很难为您提出正确的解决方案,因为您根本没有详细说明具体的功能要求。

答案 1 :(得分:0)

如果您使用的是JSF2,则可以h:button使用此

<h:button value="press here" outcome="editOrDeletePage">
    <f:param name="productId" value="#{product.id}" />
</h:button>