[英]Choosing how to pass parameters to a target bean/page using JSF
我已經使用JSF幾年了,但在決定如何將參數傳遞給目標頁面/ bean時,我仍然有疑問。
我認為這個問題有點復雜,有些人可能會告訴我把它分解成更小的問題。 但是,我也認為下面所有問題的答案都是相關的,而且當你想要JSF做的只是:“轉到那個頁面並將其作為參數傳遞”時,它解決了缺乏直覺性的問題。
h:commandLink
/ h:commandButton
, h:link
或h:outputLink
之間進行選擇? f:param
還是f:setPropertyActionListener
? 是否將參數正確傳遞給目標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.