2013-12-24 37 views
1

我有兩個JSF頁面:A.xhtml和B.xhml。如何從h:commandLink向POST請求添加參數?

A.xhtml:

<html ...> 
    <h:body> 
    <h:form> 
     <h:commandLink value="To B page" action="#{bean.goToB}"> 
      <f:param name="aURL" value="A.xhtml"/> 
     </h:commandLink> 
    </h:form> 
    </h:body> 
</html> 

豆:

@ManagedBean 
@ViewScoped 
public class Bean { 
    public String goToB(){ 
     //some logic... 
     return "B.xhtml"?faces-redirect=true"; 
    } 
} 

和B.xhtml:

<html ...> 
    <h:body> 
    <f:metadata> 
     <f:viewParam name="aURL"/> 
    </f:metadata> 

    <h:link value="To A page" outcome="#{aURL}"/> <----- this link is disabled 

    </h:body> 
</html> 

以上的鏈接標記是無效的,禁用。這是一個簡單的標籤。爲什麼我不能從B.xhtml返回到A.xhtml?錯誤在哪裏?

+0

'NAME = 「aURL」'不將參數綁定任何東西。它只是命名它。你需要'param.aURL',它從請求中選擇命名參數 – kolossus

回答

0

對不起,我讓這麼錯在JSF頁面的名稱(我寫page.xhtml.xhtml)。

我沒有刪除在結果XHTML擴展在link,我沒有刪除f:metadata和我沒有使用#{param.aURL}(我可以用#{aURL}

感謝的所有人的幫助(特別是對於CésarLoachamin和kolossus)。

2

基本上那是因爲你沒有通過一個有效的結果,所以首先嚐試把一些有效的結果頁面的名稱,而不XHTML擴展,你會看到它呈現爲鏈接。

因此,首先返回操作方法的頁面的名稱或h:link中的結果必須不具有xhtml擴展名,因此有一個Page1.xhtml操作是Page1。刪除xhtml擴展名。

其次,當你在命令鏈接使用f:param它會在請求中的參數,所以如果你重定向到使用faces-redirect它的值不會丟失,因爲瀏覽器會創建一個新的請求的另一個頁面,所以刪除faces-重定向。

最後得到的值發送從f:param使用預定義的豆param這樣:

<h:link value="To A page" outcome="#{param.aURL}"/> 

,並清除f:metadata