【问题标题】:How <c:forEach> work on ajax call?<c:forEach> 如何处理 ajax 调用?
【发布时间】:2016-05-13 02:42:57
【问题描述】:

我有一个场景,我有一个 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. 要重新构建组件树?

正如我在valueChangeListener 方法中添加重定向时看到的那样,当我在 UI 中删除重定向值时,事情在 UI 中正常工作,当我在 UI 中删除重定向值时无法正确呈现。

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

【问题讨论】:

    标签: jsf jsf-2 jstl el


    【解决方案1】:

    JSF 可以轻松渲染并生成运行时 HTML DOM 对象如果我们使用 JSF 组件而不是 &lt;c:forEach...&gt;

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

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

    【讨论】:

    • 您确定 &lt;ui:repeat/&gt; 是 JSF 组件吗?它会在运行时重新生成树吗?
    • 虽然确实是一个组件,但 本身并不生成任何 HTML。所以你的说法是错误的。
    • 列表的长度是多少。如果您打印一条消息,它会进入面板组吗?
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多