执行/更新ui中的特定组件:使用f重复:ajax

时间:2018-03-20 10:53:10

标签: jsf el jsf-2.2 omnifaces mojarra

我遇到的情况是我需要为ui中的每一行执行一个特定的组件:repeat:

<h:form id="form">
   <h:panelGroup id="mediaCards" layout="block">

    <ui:repeat id="media" value="#{mediaManager.entries}" var="m">
      <div class="media-card">

        <h:outputText id="keyword" value="#{m.keyword}" />

        <h:outputText id="producer" value="#{m.producer}" />
        <h:outputText id="location" value="#{m.location}" />

        <!-- many other fields -->        
      </div

    </ui:repeat>
  <h:panelGroup>

  <ui:remove>actual solution</ui:remove>
  <h:commandButton value="Send keywords to Server">
      <f:ajax execute="mediaCards"/>
  </h:commandButton>

</h:form>

目前我执行的整个HTML太重了,因为我有很多媒体卡,我只是在执行每一行的每个关键字。

作为替代方案,我可以为每个关键字附加一个ajax-change侦听器。但是在每个变更事件上进行服务器通信也不是最好的。

<h:outputText id="keyword" value="#{m.keyword}">
    <f:ajax/>
</h:outputText>

我希望拥有的是

的动态方法
<h:commandButton value="Send keywords to Server">
     <f:ajax execute="media:0:keyword media:1:keyword media:2:keyword media:3:keyword"/>
</h:commandButton>

我们能以优先干净的方式做到这一点吗?

注意:我使用mojarra 2.2.14没有primcefaces但omnifaces。

修改 替换ui:用c重复:foreach导致同样的问题:

<c:forEach value="#{mediaManager.entries}" var="m" varStatus="row">
    <div class="media-card">
       <h:outputText id="keyword_#{row.index}" value="#{m.keyword}" />
    </div
</c:forEach>

<ui:remove>what to do here?</ui:remove>
<h:commandButton value="Send keywords to Server">
     <f:ajax execute="keyword"/>
</h:commandButton>

0 个答案:

没有答案