Javascript 数据表外部的引用表单组件<;h:表格>;
我想从commandlink中的datatable标记中引用下表中的component id=constractidinputtext。我想在render属性中使用它的'id',而不是@all。我使用@all down只是因为我无法引用id。datatable位于标记的外部和上方Javascript 数据表外部的引用表单组件<;h:表格>;,javascript,ajax,jsf,xhtml,Javascript,Ajax,Jsf,Xhtml,我想从commandlink中的datatable标记中引用下表中的component id=constractidinputtext。我想在render属性中使用它的'id',而不是@all。我使用@all down只是因为我无法引用id。datatable位于标记的外部和上方 <h:form id="contracts"> <h:outputScript library="js" name="common.js" target="head"/> <h
<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>
这是数据表的commandlink:
<h:commandLink id="editLink" value="#{bundle.ListUnitEditLink}"
action="#{contractManager.updateContract}">
<f:ajax onevent="disablePK" render="@all" />
</h:commandLink>
链接中ajax的全部用途是在单击commandlink并填充表单时禁用表单组件。我还注意到,正如使用@all做我想做的事情一样(使用禁用的inputText填充表单),它导致我需要在数据表中的commandlink上单击commandlink两次,表单才能填充另一项。为什么会发生这种情况?如果它们不在同一个父组件中,那么您应该只通过其绝对客户机ID而不是(无效)相对客户机ID引用另一个组件。绝对客户机ID是完整的客户机ID(如您在生成的HTML输出中所看到的),前缀为命名容器分隔符(默认为
:
)
所以,这应该可以
<f:ajax ... render=":contracts:contractIdInputText" />
(假设
本身不在另一个NamingContainer
父容器中,再次检查生成的HTML输出以确保)
至于为什么需要单击两次命令链接,这很可能与。修复方法是在
呈现中显式包含另一种形式。另请参见。如果它们不在同一父组件中,则应仅通过另一组件的绝对客户机ID而不是(无效)相对客户机ID引用另一组件。绝对客户机ID是完整的客户机ID(如生成的HTML输出中所示),前缀为命名容器分隔符(默认为:
)
所以,这应该可以
<f:ajax ... render=":contracts:contractIdInputText" />
(假设
本身不在另一个NamingContainer
父容器中,再次检查生成的HTML输出以确保)
至于为什么需要单击命令链接两次,这很可能与有关。修复方法是在渲染中显式地包含另一种形式。另请参见。我将整个数据表放在一个标记中,并删除了包含CommandLink的标记。这解决了CommandLink上单击两次的问题。我将整个datatable并删除了包含CommandLink的标记。这解决了CommandLink上单击两次的问题。