2012-12-15 23 views
3
的一種有效方法表達

我有,我想用它來導航到另一個JSF的facelet一個命令,但是我得到一個不是有效的方法表達:不在JSF

<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" 

我想當我有多個屬性,我傳遞,我沒有正確劃分它們。有任何想法嗎?

回答

5

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 <input type="submit">元素,它提交到父HTML <form method="post">action屬性中指定的非常相同的URL。

另請注意,在表單提交過程中,不會評估這些參數,而是在顯示錶單時進行評估。如果你以這種方式通過提交的值,那麼你基本上做錯了。也許你想將它們指定爲查看參數,以便您可以使用action="editOrDeletePage?faces-redirect=true&amp;includeViewParams=true"作爲操作。

畢竟,很難爲您提出正確的解決方案,因爲您沒有詳細闡述具體的功能要求。

+0

贏家,非常感謝! – user1154644

0

如果您正在使用JSF2您可以使用h:button這個

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