javascript - 从外部数据表引用表单组件 <h :form>

标签 javascript ajax jsf xhtml

我想从命令链接中的数据表标记引用下面表单中的组件 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/

相关文章:

javascript - 按名称查找通过 POST 打开的子窗口

php - 使用ajax重新加载php代码

java - p :ajax using an global HTML id to reference to an <h:messages> attribute

javascript - 在特定位置设置插入符号 jquery

javascript - 如何使用 React 路由器嵌套路由

javascript - 在文本框中显示下拉复选框中的选择计数

javascript - vue.js 表单验证和ajax提交

javascript - 为 JavaScript 提供按钮的 id

ajax - 部分渲染冗余方法调用

jsf - setter 方法返回类型是否必须为 void?