2012-05-04 58 views
1

我有一個顯示搜索過程摘要的jsf facelet。 現在我想重定向到一個詳細頁面,如果只有一個元素被搜索引擎發現。我不想在我的bean中實現這個重定向,因爲我想從我的java代碼中獲得有關此重定向的「知識」。如果el表達式爲真,如何從jsf facelet重定向?

所以我想寫這樣的事情:

<ui:redirect if="#{searchResult.count eq 1}" target="details.jsf"> 
    <f:param name="id" value="#{searchResult.firstResult.technicalId}" /> 
</ui:redirect> 

對於任何解決方案或想法?

我知道,在JSF 2.2中有頁面操作,但我使用的是JEE6,並且有JSF 2.0可用。 Btw。我目前使用的是MyFaces,Primefaces和Richfaces。

問候。

回答

1

你應該在控制器做這個工作,而不是在視圖中。

要獲得搜索結果,首先需要通過搜索表單調用操作方法,對吧?只要在那裏做重定向工作。您可以通過在操作結果的查詢字符串中指定faces-redirect=true來告訴JSF發送重定向。

public String search() { 
    results = service.find(query); 

    if (results.size() == 1) { 
     return "details?faces-redirect=true&id=" + results.get(0).getTechnicalId(); 
    } 
    else { 
     return "results"; 
    } 
} 

或者,如果它是由<f:event type="preRenderView">處理的GET請求,那麼這樣做:

public void onPreRenderViewListener() { 
    results = service.find(query); 

    if (results.size() == 1) { 
     FacesContext.getCurrentInstance().getExternalContext().redirect("details.jsf?id=" + results.get(0).getTechnicalId()); 
    } 
} 
0

我會說最簡潔的方法是在bean中生成動作。 無論如何,我會建議你模擬一個點擊,以防你的搜索計數是1與JavaScript的情商。

你需要隱藏包含計數輸入:

<h:inputHidden id="count" value="#{searchResult.count}" /> 

和一個隱藏的按鈕來觸發重定向:

<h:commandButton id="redirectButton" action="details.jsf" style="display: none;" /> 

那麼當你觸發搜索,更新輸入計數和的onComplete你可以檢查 如果count的值是1,那麼你可以點擊commandButton。

如果你使用jQuery,它會像

if($("#count").val()==1){ 
     $("#redirectButton").click(); 
    } 
相關問題