[英]JSF: navigation
我必須警告你:問題可能相當愚蠢,但我現在似乎無法繞過它。
我有兩個托管bean,比方說A和B:
class A
{
private Date d8; // ...getters & setters
public String search()
{
// search by d8
}
}
class B
{
private Date d9; //...getters & setters
public String insert()
{
// insert a new item for date d9
}
}
然后我有兩個JSP頁面, pageA.jsp (搜索頁面)和pageB.jsp (輸入頁面)。 我想要做的是在pageB中放置一個命令 按鈕,以便打開搜索頁面頁面A以某種方式傳遞參數d9 ,或者在b.insert()之后直接導航到pageA 。 我想要做的是在插入后顯示搜索結果。
也許只是因為我無法看到清晰,簡單的解決方案,但我想知道這里最好的做法是什么,也......
我想這些可能的解決方案:
JSF 1.1 / 1.2 raw不提供簡單的方法。 Seam / Spring都有辦法解決這個問題,你可以做幾件事。 一旦發布,JSF 2也應該有解決方案。
可能最容易也是最方便的是將兩個bean合並為一個並使其成為會話范圍。 當然,擔心的是這個bean不會被刪除並保持會話直到會話超時。 耶內存泄漏!
另一種解決方案是將日期作為GET參數傳遞。 例如,你的動作方法可以調用
FacesContext.getCurrentInstance().getExternalContext().redirect("pageB?d9=" + convertDateToLong(d9));
然后在另一側獲取參數。
您應該在faces-config.xml中配置導航流。 在理想情況下,您將返回“狀態”消息,該消息將決定流程。 閱讀以下鏈接: http : //www.horstmann.com/corejsf/faces-config.html http://publib.boulder.ibm.com/infocenter/rtnlhelp/v6r0m0/index.jsp?topic=/com。 businessobjects.integration.eclipse.doc.devtools /開發商/ JSF_Walkthrough8.html
就將值從一個頁面傳遞到另一個頁面而言,您可以使用支持bean。 有關支持bean的更多信息, 請 訪問 : http : //www.netbeans.org/kb/articles/jAstrologer-intro.html http://www.coderanch.com/t/214065/JSF/java/backing-beans-vs-managed -豆子
希望我已經理解並正確回答了你的問題
在bean之間共享值的方法
FacesContext facesContext = FacesContext.getCurrentInstance();
Application app = facesContext.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = facesContext.getELContext();
ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class);
return valueExp.getValue(elContext);
在上面的代碼中,“expression”類似於#{xyzBean.beanProperty}
因為JSF使用單例實例,所以你應該能夠訪問其他bean的值。 如果你找到關於這種技術的更多細節,我相信你會得到你想要的東西。
<h:commandLink action="#{b.insert}" value="insert"/>
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext()。getRequestMap()。put(“d9”,d9);
<from-outcome>return string of insert method</from-outcome>
<to-view-id>address of A</to-view-id>
在A類中,當導航頁面時,應該初始化A,因為它將被引用。
FacesContext fc = FacesContext.getCurrentInstance();
fc.getExternalContext()。getRequestMap()。get(“d9”,d9);
對不起,我不能給完整的代碼,因為我在這里沒有ide,它的互聯網機器在工作。 因此我無法提供細節。
在我看來,最簡單的方法是第3個選項 - 在同一個類中同時使用查詢和插入方法。 你可以這樣做:
public String query () {
//...
}
public String Insert() {
//insert
return Query(); }
如果你的類是托管Beans,你可以從B類加載A類,並在最后的insert方法中調用A.query() 。 A級也可以
<managed-bean-scope>session</managed-bean-scope>
faces-config.xml中的參數,加載時不會再次實例化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.