【问题标题】:Render ids generated by nested <f:ajax> inside <ui:repeat> do not match those generated by JSF<ui:repeat> 内的嵌套 <f:ajax> 生成的渲染 id 与 JSF 生成的不匹配
【发布时间】:2013-04-27 00:35:39
【问题描述】:

我的表单在 ui:repeat 组件中包含一个下拉列表。选择任何列表项时,F:ajax调用触发下拉列表的刷新,以及UI中的其他几个组件:重复。我正在努力为 f:ajax render="???????" 找出正确的 id 格式(见下面的小面视图)。任何帮助,将不胜感激。

我提供了渲染屏幕的原始源视图(实际的 JSF id)和一个显示与编码相同的组件的 facelet 视图。

浏览器源代码视图

<form id="GeneralMedicalHistory" name="GeneralMedicalHistory" method="post" action="..." 

<span id="GeneralMedicalHistory:GeneralMedicalHistory_P"> 

<span id="GeneralMedicalHistory:medhist">

   <table border="0" class="table_form">

   <select id="GeneralMedicalHistory:RPTK:0:MedicalCondition" name="GeneralMedicalHistory:RPTK:0:MedicalCondition" >  ---> TARGET ID  (UI:REPEAT)

Facelet 视图

<h:form id ="GeneralMedicalHistory">
<h:panelGroup id="GeneralMedicalHistory_P">
<h:panelGroup id="medhist">
<ui:repeat value="#{f.repeatingItemGroups['MedicalHistory'][1]}" var="repeatKey" id="RPTK" >      
<h:commandLink action="remove_repeating_ig" rendered="${f.items[removeOid].isNew and repeatKey != '1'}"></>
<table border="0" class="table_form"> 
 <h:selectOneMenu value="${f.items[oid].value}" id="MedicalCondition" >  
   <f:selectItems value="${f.items[oid].codeListItems}"/>
   <f:ajax render="?????????" event="click" listener="#{f.clearModelValuesViaAjax}"  /> 
 </h:selectOneMenu>
</table>
</h:panelGroup>     
</h:panelGroup>      
</h:form>

我尝试了以下方法,但都没有成功...

  1. f:ajax render="GeneralMedicalHistory:RPTK:0:MedicalCondition"
  2. f:ajax render=":GeneralMedicalHistory:RPTK:0:MedicalCondition"
  3. f:ajax render="GeneralMedicalHistory_P:medhist:RPTK:0:MedicalCondition"
  4. f:ajax render=":GeneralMedicalHistory_P:medhist:RPTK:0:MedicalCondition"
  5. f:ajax render="GeneralMedicalHistory:GeneralMedicalHistory_P:medhist:RPTK:0:MedicalCondition"
  6. f:ajax render=":GeneralMedicalHistory:GeneralMedicalHistory_P:medhist:RPTK:0:MedicalCondition"

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    &lt;ui:repeat&gt; 本身就是NamingContainer。您可以仅引用相对于 &lt;ui:repeat&gt; 本身的客户端 ID。

    您的代码示例令人困惑,您基本上是在尝试执行render="@this",所以这里有一个不同且更详细的示例,其中另一个菜单组件和一些输入组件在当前菜单更改时进行了 ajax 更新:

    <ui:repeat ...>
        <h:selectOneMenu ...>
            ...
            <f:ajax ... render="otherMenu someInput" />
        </h:selectOneMenu>
        <h:selectOneMenu id="otherMenu" ... />
        <h:inputText id="someInput" ... />
    </ui:repeat>
    

    另见:

    【讨论】:

    • 我的渲染列表确实包含的不仅仅是@this,所以你的例子更接近现实。Ta。上面的源树 id 包括 refs。到所有前面的容器,例如 GeneralMedicalHistory:RPTK 或 GeneralMedicalHistory:medhist:RPTK + 重复键值(0,1,2 等)+ 组件 ID,例如医疗条件。所有前面的命名容器都存在于锅中。目标 id a/c 查看源代码。在 99% 的其他 ajax 案例中,我指定了 formid:componentid - 表单是容器并且渲染 id 反映了它。在当前情况下,渲染 id 不应包含容器 id,仅包含组件 id。这是正确的吗?
    • 如果它在 same 命名容器内,是的。命名容器有&lt;ui:repeat&gt;、&lt;h:form&gt;、&lt;h:dataTable&gt;等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2011-10-14
    • 2011-04-12
    相关资源
    最近更新 更多