1

我想从命令链接中的数据表标记中引用下面表单中的组件 id=contractIdInputText。我想在渲染属性中使用它的 id 而不是@all。我在下面使用@all 只是因为我无法引用 id。数据表位于标签之外和之上。

<h:form id="contracts">
   <h:outputScript library="js" name="common.js" target="head"/>
   <h:panelGrid columns="3"   columnClasses="rightalign,leftalign,leftalign">

   <h:outputLabel for="contractIdInputText" rendered="true" value="Contract Nooo.: " />
   <h:inputText id="contractIdInputText" required="true"                                         value="#contractManager.newContractId}" />
</form>

这是数据表的命令链接:

 <h:commandLink id="editLink" value="#{bundle.ListUnitEditLink}" 
     action="#{contractManager.updateContract}">
     <f:ajax onevent="disablePK" render="@all" />
 </h:commandLink>

链接中 ajax 的全部目的是在我单击命令链接并填充表单时禁用表单组件。我还注意到,就像使用 @all 做我想要的一样(在禁用 inputText 的情况下填充表单),这导致我需要在数据表中的命令链接上单击命令链接两次,以便用另一个填充表单物品。为什么会这样?

4

1 回答 1

1

如果它们不在同一个父级中,那么您应该只通过其绝对客户端 ID 而不是(无效)相对客户端 IDNamingContainer引用另一个组件。绝对客户端 ID 是完整的客户端 ID(如您在生成的 HTML 输出中所见),前缀为命名容器分隔符(默认为)。:

所以,这应该做

<f:ajax ... render=":contracts:contractIdInputText" />

(假设它<form id="contracts">本身不在另一个NamingContainer父级中,再次,只需检查生成的 HTML 输出以确保)

至于为什么需要两次单击命令链接,这很可能与JSF 规范问题 790有关。解决方法是在render. 另请参阅包含其他表单的内容的 Ajax 呈现

于 2012-08-08T11:17:34.057 回答