jsf 2.0 f:找不到ajax渲染ID

时间:2011-05-10 10:12:43

标签: ajax jsf-2 render

当弹出窗口中的“保存”按钮(pp1)单击时,项目列表会更新。 但是当按下项目列表中的更新按钮时,渲染ID:form1:pp1在渲染时不会出现错误。如果做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>

2 个答案:

答案 0 :(得分:6)

由于您在表单上有:form1:pp1prependId="false"将无效。 pp1将无效,因为它正在查找与<ui:repeat>相同范围内的组件,UINamingContainer本身就是<h:panelGroup id="pp1">组件。

在webbrowser中打开JSF页面,右键单击查看源以获取生成的HTML。找到由<span id="foo:bar:pp1"> 生成的HTML元素。它应该看起来像这样

:

您需要在render属性中使用前缀为<f:ajax render=":foo:bar:pp1"> 完全此ID。

j_id0

如果存在自动生成的ID部分,例如{{1}},那么您需要为相关的父组件提供固定ID。

答案 1 :(得分:0)

如果您使用prependId=false,则PanelGroup的ID为pp1而不是form1:pp1。 (假设您的属性“prependID”中存在拼写错误,而不是“prependid”)