2011-01-28 155 views
0

首先,我想問我最後一個問題。 didn't知道系統如何在這裏工作:-)JSF阿賈克斯問題

我有一個問題coercning JSF和Ajax。 我的web應用程序是動態的。整個頁面一開始只加載一次。 當用戶在菜單中導航時,只有中心表格更改其輸出。

我有一些組件像primeface的數據表或只是簡單的按鈕,在我的bean中執行功能。我的web應用程序連接到後端服務器,信息在JSF和後端之間共享,然後顯示給用戶。

當用戶點擊例如在「搜索」按鈕功能上,結果應顯示在我的數據表中。方法{#searchBean.doSearch}將被執行。消息通過用戶的信息發送到後端。幾秒鐘後,JSF收到這些信息。 這是我的principe。

現在我想渲染手動DataTable,並告訴他「所有的搜索結果已經收到。請更新結果」 是否有可能通過JSF手動渲染組件?還是有另一種解決方案。

而我的第二個問題。 當郵件發送到後端時,可能需要幾秒鐘才能收到結果, 向用戶顯示「等待」郵件的最佳方式是什麼(使用對話框)? 當我從我的後端收到結果時,我想手動更新我的組件,以便顯示接收到的信息,然後我需要一種方法來刪除此「等待」對話框。

我希望..你明白我想要什麼,因爲我的英語不是最好的:-) 我不知道如何開始解決我的問題......我想我只需要一種方法來通過JSF更新HTML元素和手動渲染組件。但我沒有在互聯網上找到任何東西。也許我找錯了東西?

問候, 約翰尼

回答

0

您可以使用<f:ajax>這一點。它具有render屬性,該屬性應該指向要重新呈現的組件的(相對或絕對)客戶端ID。從:開始表示絕對(因爲它是在生成的HTML中),否則它相對於當前的naming container(如<h:form>)。

下面是一個簡單基本的例子:

<h:form> 
    <h:inputText value="#{bean.query}" /> 
    <h:commandButton value="Search" action="#{bean.search}"> 
     <f:ajax execute="@form" render=":results" /> 
    </h:commandButton> 
</h:form> 

<h:panelGroup id="results"> 
    <h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}"> 
     <h:column>#{result}</h:column> 
    </h:dataTable> 
</h:panelGroup> 

Bean這個樣子的:

@ManagedBean 
@ViewScoped 
public class Bean implements Serializable { 

    private String query; 
    private List<Result> results; 

    public void search() { 
     results = resultDAO.list(query); 
    } 

    // ... 
} 
+0

謝謝各位!我現在要試用這些方法。 – Johnny 2011-01-28 18:16:30

1

由於使用Primefaces(這是在考慮前2.0 JSF建),您可以使用更具體的方式來處理Ajax(比BalusC所描述的方式)。

您會注意到大多數組件都有一個名爲「update」的屬性。您可以使用此屬性來告訴JSF發生什麼事後應該更新哪些組件。例如,如果你有一個按鈕標記爲:

<p:commandButton value='test' action='#{bean.search}' update='panelContainingDatatable' /> 

它總是會刷新一個component,「panelContainingDatatable」的客戶端ID執行豆後。search()方法。

另外,如果你想告知您的用戶一個Ajax請求之前,使用號碼:ajaxStatus(http://www.primefaces.org/showcase/ui/pprAjaxStatus.jsf

要小心,有警告:

  • 我們正在談論的客戶ID在這裏,不是組件id(最好在頁面源代碼中查看)

  • 當ajax與ui混合時會出現邊緣情況:repeat和h:dataTable;坦率地說,你最好儘量避免解決這些問題。它們來自實施中的缺陷以及有關ui的次優設計決策:重複。

+0

謝謝你們!我現在要試用這些方法。 – Johnny 2011-01-28 18:15:51