【问题标题】:jsf 2.0 f:ajax render ID not foundjsf 2.0 f:ajax 渲染 ID 未找到
【发布时间】:2011-08-22 08:29:08
【问题描述】:

当单击弹出窗口(pp1)中的“保存”按钮时,项目列表会更新。 但是当按下项目列表中的更新按钮时,渲染 ID :form1:pp1 is not there 渲染时出现错误。如果做 render="@all" 它可以工作,但它不好。 (错误:<f:ajax> 包含未知 id ':form1:pp1')

<h:form id="form1" prependid=false>
<h:panelGroup id="projects">
<ui:repeat var="action" value="#{dadadada}" varStatus="status">
<h:commandButton value="Save">
//gives id not found error
<f:ajax event="click" execute="@form" render=":form1:pp1" listener="#{fsfsfsfsfs}" />
</h:commandButton>
</ui:repeat>

</h:panelGroup> // project panel group

//popup
<h:panelGroup id="pp1">
<div id="popup2" class="popup_block">

//save button in the popup
<div class="popupBody_save2">
            <h:commandButton  image="resources/images/saveBtn.gif" value="Save">
             <f:ajax event="click" execute="@form" render="projects" listener="#{dfsfssfs}" />
            </h:commandButton>
        </div>

</div>
</h:panelGroup>

</h:form>

【问题讨论】:

    标签: ajax jsf-2 render


    【解决方案1】:

    :form1:pp1 不起作用,因为您在表单上有 prependId="false"pp1 将不起作用,因为它会在与 &lt;ui:repeat&gt; 相同的范围内寻找组件,&lt;ui:repeat&gt; 本身就是 UINamingContainer 组件。

    在浏览器中打开 JSF 页面,右键单击并查看源代码 以获取生成的 HTML。找到由&lt;h:panelGroup id="pp1"&gt; 生成的HTML 元素。它应该看起来像这样

    <span id="foo:bar:pp1">
    

    您需要完全render 属性中使用以: 为前缀的ID。

    <f:ajax render=":foo:bar:pp1">
    

    如果有j_id0等自动生成的ID部分,那么你需要给有问题的父组件一个固定的ID。

    【讨论】:

    • 作为 prependId=false,它显示为&lt;span id="pp1"&gt;,我应该可以使用 render = ":pp1" 访问它,不是吗?但是id还是找不到元素
    【解决方案2】:

    如果您使用prependId=false,您的panelGroup 的ID 是pp1 而不是form1:pp1。 (假设您的属性“prependID”而不是“prependid”中有错字)

    【讨论】:

    • 查看生成的 html 源代码并尝试找出您的 panelGroup 的真实 ID。
    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 2012-04-01
    • 2012-08-03
    • 2012-05-27
    • 2012-12-26
    • 1970-01-01
    • 2011-12-12
    • 2012-01-01
    相关资源
    最近更新 更多