<c:foreach>如何处理ajax调用?

时间:2016-02-03 18:31:24

标签: jsf jsf-2 jstl el

我有一个场景,我有一个SelectOneMenu

<h:selectOneMenu  value="#{bean.names}" valueChangeListener="#{bean.templChangeListner}" required="true" requiredMessage="Please select an Equipment type">
    <f:selectItem itemLabel="-------Select Names------"
     itemValue="${null}" noSelectionOption="true" />
    <f:selectItems value="#{bean.fetchnames()}" var="spec" 
     itemLabel="#{spec.specName}" itemValue="#{spec.specificationId}" />
    <a4j:ajax event="valueChange" render="outputPanel"
    immediate="true" execute="@this"/>
</h:selectOneMenu>

valueChange我必须render

的小组
<a4j:outputPanel id="outputPanel">

    <c:forEach items="#{ban.genericFeaturesList}"
     var="genFeatVar" varStatus="genericIndex">
  ...............
  ...............
  ...............
  <!--Lots of logic to render component --> 
   </c:forEach> 

我的问题是,当valueChange发生时,outputPanel会再次呈现

  1. genericFeaturesList将包含新的更新数据?
  2. 将再次构建组件树?
  3. 正如我在valueChangeListener方法中添加重定向时所看到的那样,在UI中正常工作以及我在UI中删除重定向值时无法正确呈现。

    FacesContext.getCurrentInstance().getExternalContext().redirect("PageName")
    

1 个答案:

答案 0 :(得分:0)

JSF可以轻松呈现并生成运行时HTML DOM对象如果我们使用JSF组件而不是<c:forEach...>

<h:panelGroup id="outputPanel" rendered="#{not empty ban.genericFeaturesList}">
    <ui:repeat value="#{ban.genericFeaturesList}" var="instance">
......
......
......
    </ui:repeat>
<h:panelGroup>

...试试这个。祝你好运!!!