我想从命令链接中的数据表标记引用下面表单中的组件 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 的情况下填充表单),它导致我需要在数据表中的命令链接上单击命令链接两次,以便用另一个表单填充表单元素。为什么会发生这种情况?
最佳答案
如果它们不在同一个 NamingContainer
父组件,那么您应该仅通过其绝对客户端 ID 引用其他组件,而不是通过(无效)相对客户端 ID。绝对客户端 ID 是完整的客户端 ID(如您在生成的 HTML 输出中所见),以命名容器分隔符字符为前缀(默认为 :
)。
所以,这应该可以
<f:ajax ... render=":contracts:contractIdInputText" />
(假设 <form id="contracts">
本身不在另一个 NamingContainer
父级中,再次检查生成的 HTML 输出即可确定)
至于为什么需要点击命令链接两次,这很可能与JSF spec issue 790有关。 。解决方法是在 render
中显式包含其他形式。 。另请参阅Ajax rendering of content which contains other form .
关于javascript - 从外部数据表引用表单组件 <h :form>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11858778/