簡體   English   中英

選擇如何使用JSF將參數傳遞給目標bean /頁面

[英]Choosing how to pass parameters to a target bean/page using JSF

我已經使用JSF幾年了,但在決定如何將參數傳遞給目標頁面/ bean時,我仍然有疑問。

我認為這個問題有點復雜,有些人可能會告訴我把它分解成更小的問題。 但是,我也認為下面所有問題的答案都是相關的,而且當你想要JSF做的只是:“轉到那個頁面並將其作為參數傳遞”時,它解決了缺乏直覺性的問題。

  1. 首先,如何在Forward和Redirect之間做出決定?
  2. 之后,如何在h:commandLink / h:commandButtonh:linkh:outputLink之間進行選擇?
  3. 然后,結合我上面選擇的選項,我應該使用f:param還是f:setPropertyActionListener 是否將參數正確傳遞給目標bean,與其范圍無關?
  4. 最后,在目標bean /頁面上,何時應該使用f:viewParam ,還是以編程方式從請求中恢復參數?

我將根據自己的經驗回答你的問題。 其中一些是如此開放,以至於不止一個答案可以適合。

除非您明確要求更改瀏覽器URL,否則頁面轉發是要走的路。 頁面轉發基本上比重定向更快,因為它需要更少的步驟。 如果要使您的視圖可收藏,則需要頁面重定向

僅在需要POST服務器時才使用<h:commandLink /> / <h:commandButton /> 稍后,您將能夠執行頁面轉發或重定向,具體取決於方法返回的內容。 舉個例子:

<h:commandLink action="#{bean.processForm}" value="Submit" />
public String processForm(){
    try{
        save();
        return "list";
    }
    catch(Excepcion e){
        addFacesMessage("Error saving");
        //Error saving the object, keep in the same view
        return null;
    }
}

使用<h:link outcome="list" value="Go to list" />獲取JSF應用程序中的純頁面到頁面導航 您可以使用向前翻頁和重定向。 使用<f:param />傳遞視圖參數。

<h:outputLink value="www.stackoverflow.com" />可用於指向其他站點的外部鏈接 (不在您的應用程序中)。 使用<f:param />傳遞視圖參數。 然而,我更喜歡在<a href="www.stackoverflow.com" />自己的情況下使用純HTML。

至於在POST請求中將參數傳遞給動作方法,你有幾個選擇。 f:setPropertyActionListener在JSF 1.x中如此受歡迎,但是如果你已經在2.x我會建議你使用EL 2.2,它允許方法參數聲明 能夠使用它取決於您正在使用的應用程序服務器,但即使不可用,您也可以自行導入。 然后,你將能夠做到這樣的事情:

<h:commandButton action="#{bean.saveCar(currentCar)}" value="Save Car" />

盡可能地使用它,它會讓事情變得更容易。

對於視圖參數,也可以使用<f:viewParam /> 它是從GET請求解析參數的標准JSF方式,所以讓框架為您執行檢索工作!

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM