Jsf 2 如何在bean'中的UIData组件内收集UIInput组件的值;什么是行动方法?
在bean的操作方法期间,我试图在Jsf 2 如何在bean'中的UIData组件内收集UIInput组件的值;什么是行动方法?,jsf-2,datatable,richfaces,Jsf 2,Datatable,Richfaces,在bean的操作方法期间,我试图在UIData组件中收集UIInput组件的值,以便验证重复的值。我试图将UIInput组件绑定到bean属性并获取其值,但它打印null。如果我把它放在datatable之外,那么它会打印期望值。数据表有什么问题吗 <rich:dataTable binding="#{bean.table}" value="#{bean.data}" var="item"> <h:column> <f:facet name=
UIData
组件中收集UIInput
组件的值,以便验证重复的值。我试图将UIInput
组件绑定到bean属性并获取其值,但它打印null
。如果我把它放在datatable之外,那么它会打印期望值。数据表有什么问题吗
<rich:dataTable binding="#{bean.table}" value="#{bean.data}" var="item">
<h:column>
<f:facet name="header">
<h:outputText value="Field1" />
</f:facet>
<h:inputText binding="#{bean.input}" value="#{item.field1}" />
</h:column>
</rich:dataTable>
数据表没有问题。JSF组件树中只有一个
UIInput
组件,每当父组件对模型的每个项进行迭代时,其状态都会发生更改。因此,状态仅在UIData
迭代期间可用,而不是在迭代之前或之后可用。当父UIData
组件没有在bean的action方法中迭代时,您试图访问单个组件的值,因此这些值将始终返回null
您需要通过访问UIData
上的组件树,并在VisitCallback
实现中收集感兴趣的信息
table.visitTree(VisitContext.createVisitContext(FacesContext.getCurrentInstance()), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent target) {
if (target instanceof UIInput) {
UIInput input = (UIInput) target;
System.out.println("id: " + input.getId());
System.out.println("value: " + input.getValue());
}
return VisitResult.ACCEPT;
}
});
顺便说一下,您通常会使用
UIInput
组件上的正常Validator
执行验证,或者在这种特殊情况下,最好使用ValueChangeListener
。这使得失效和消息处理更加容易。数据表没有问题。JSF组件树中只有一个UIInput
组件,每当父组件对模型的每个项进行迭代时,其状态都会发生更改。因此,状态仅在UIData
迭代期间可用,而不是在迭代之前或之后可用。当父UIData
组件没有在bean的action方法中迭代时,您试图访问单个组件的值,因此这些值将始终返回null
您需要通过访问UIData
上的组件树,并在VisitCallback
实现中收集感兴趣的信息
table.visitTree(VisitContext.createVisitContext(FacesContext.getCurrentInstance()), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent target) {
if (target instanceof UIInput) {
UIInput input = (UIInput) target;
System.out.println("id: " + input.getId());
System.out.println("value: " + input.getValue());
}
return VisitResult.ACCEPT;
}
});
顺便说一下,您通常会使用UIInput
组件上的正常Validator
执行验证,或者在这种特殊情况下,最好使用ValueChangeListener
。这使得失效和消息处理更加容易