2011-01-28 150 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