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

use*_*644 4 jsf

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

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

如果我有,我可以让它工作

action="editOrDeletePage.xhtml?editing=true"
Run Code Online (Sandbox Code Playgroud)

我想当我有多个属性我正在通过时,我没有正确划分它们.有任何想法吗?

Bal*_*usC 9

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>
Run Code Online (Sandbox Code Playgroud)

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

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

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