JSF-Ajax重渲染器<;h:textInput…>;关于变化
我正在尝试获得一个h:textInput以在更改时重新加载,我已经用a4j:ajax和f:ajax进行了尝试 使用a4j:ajax时:JSF-Ajax重渲染器<;h:textInput…>;关于变化,jsf,jsf-2,Jsf,Jsf 2,我正在尝试获得一个h:textInput以在更改时重新加载,我已经用a4j:ajax和f:ajax进行了尝试 使用a4j:ajax时: <h:panelGroup id="xyzPG"> <ui:repeat var="var" ... > ... <h:inputText id="#{idController.getIdXYZ(var.id)}" value="#{someModel.value}" size="3" style
<h:panelGroup id="xyzPG">
<ui:repeat var="var" ... >
...
<h:inputText id="#{idController.getIdXYZ(var.id)}"
value="#{someModel.value}"
size="3"
styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
<a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
</h:inputText>
...
</ui:repeat>
</h:panelGroup>
因此,我们使用ui:repeat的offset和step属性。在没有看到支持bean代码的情况下,我认为您应该使用
<h:inputText id="#{idController.idXYZ}"
根据设计,您无法使用类似于
的渲染时间标记动态生成id
属性
-
为了视图构造和ajax更新的目的,在呈现视图之前,组件的
id
s必须在视图构造期间可用<代码>
已经满足了其子组件ID的唯一性。但是,如果需要控制ID,则需要使用编译时标记处理程序,如
:
这假设
xyzPG
直接包含在
中。您是否尝试过其他evens,如blur
、onkeyup
等?您动态使用id
会让我的眼睛流血。您可以使用下面的答案来避免与此相关的所有问题:我认为您遇到了视图与渲染时间的问题。没有c:repeat
-您有ui:repeat
或c:forEach
吗?如果是后者,请参见wupps(典型错误),正如您正确地指出它的ui:重复当您编写代码而不是复制原始文件时发生的情况。关于动态id-我也不太满意,但由于项目特定的限制,该决定是由项目架构师做出的,因此我们一直坚持这一点。我已经添加了解释,解释了为什么我们使用ui:Repeat id解析正确-当您使用el符号()或(param)你必须写完整的方法,包括get。谢谢你的详细回答。我通过简单地使用rich:datagrid解决了这个问题。
----------------------------
| dataSet1 | dataSet 2 |
----------------------------
| dataSet3 | dataSet 4 |
etc...
<h:inputText id="#{idController.idXYZ}"
<h:inputText id="#{idController.getIdXYZ()}"
<c:forEach items="#{idController.itemsList}" var="theVar">
<h:inputText id="#{idController.getIdXYZ(theVar.id)}" value="#{someModel.value}" size="3" styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
<a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
</h:inputText>
<c:forEach/>
<f:ajax event="change" render=":form1:xyzPG" listener="#{listener.doSomeStuff}"/>