我在我的项目JSF 1.2和标签<a4j:support>
中使用此处。
好吧,我在这里使用<h:dataTable />
在屏幕上打印一份财务费用清单,用户可以随时插入新费用或编辑现有费用,这些费用字段的值(金额,余额,价值)显示在inputTexts组件中。
当我使用<h:dataTable />
时,它的inputTexts会自动生成,因此它会创建具有动态id的动态inputTexts。我看了一下页面的html源代码,JSF用于动态生成id的模式是这样的:
id="formTemplate:tableForm:0:inputTextValue" ;
id="formTemplate:tableForm:1:inputTextValue" ;
id="formTemplate:tableForm:2:inputTextValue"
在xhtml页面中,我与dataTable一起使用的代码是:
<h:inputText id="inputTextValue" value="#{item.value}" label="Value" styleClass="field" size="9" readonly="true" dir="RTL" style="font-size:12px;width:170px">
我的业务规则的工作原理如下:当用户在inputTextBalance中键入内容时,它会调用事件onBlur,它会自动在字段中插入另一个值&#34; value&#34;,但要更新此inputTextValue,我需要在我的面板(panelDataTable)中执行reRender,因此它reRender整个dataTable(dataTable在Panel中)。
<h:inputText id="inputTextBalance" value="#{item.balance}" dir="RTL">
<f:convertNumber currencyCode="BRL" type="currency" />
<a4j:support event="onblur" reRender="panelDataTable" ajaxSingle="true" action="#{expenses.update}"/>
</h:inputText>
现在遇到了麻烦,我需要做的只是reRender只有inputTextValue而不是面板,但这些字段是动态生成的,我无法得到它们。就像我之前说的那样,这是JSF用来生成字段id的模式
id="formTemplate:tableForm:0:inputTextValue" ;
id="formTemplate:tableForm:1:inputTextValue" ;
id="formTemplate:tableForm:2:inputTextValue"
但是当我在reRender属性中使用任何这些id时,Ajax的日志会返回以下消息:
18:23:57,208 WARN [AjaxContext] Target component for id formTemplate:tableForm:0:inputTextValue not found
我试过了,但我收到了同样的错误消息:reRender="#{rich:clientId('inputTextValue')}"
这里最奇怪的是它向我显示了未找到输入的这条消息,但是在html源代码中,他输入文本的id与我对reRender的内容相同。
这里有人已经解决了这个问题吗?对我有什么建议吗?
谢谢!
答案 0 :(得分:0)
你应该将h:dataTable
绑定到bean中的变量,以便到达当前行索引。
<h:dataTable binding="#{myManagedBean.dataTable}" ...>
然后您可以像这样更改a4j:support
:
<a4j:support reRender="formTemplate:tableForm:#{myManagedBean.dataTable.rowIndex}:inputTextValue" ... />