好吧,我的ManagedBean中有一个通用的setter方法。这个通用方法应该将具有组件id的属性的值添加到"Map"中,请参阅下面XHTML页面中的组件:
<h:outputLabel value="Data Fechamento: " />
<p:calendar pattern="dd/MM/yyyy" required="true"
requiredMessage="A Data de Fechamento é obrigatória"
value="#{relatorioMB.param}">
</p:calendar>
在我的ManagedBean中,请参阅setter方法"setParam()":
public void setParam(Object value){
String compId = "dataFechamento"; //here should be a generic form to get component id
AppContext.getInstance().addAttribute(compId, value);
}
XHTML页面中的所有组件都将调用"setParam()",并向"AppContext"类添加一个新属性。我该怎么做?
编辑1
我尝试在setter方法中使用getCurrentComponent,但它返回的是"panelGrid"(父级),而不是Calendar。
UIComponent ui = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
您可以创建一个处理程序bean,它将获取所有param并将它们放入一个数组中。在那里,您可以使用循环为数组中的每个元素调用setParam()
。
例如:
在您的页面上,如果您需要输入的信息文本:
<h:inputText id="id" value="#{Handler.id}"></h:inputText>
这将处理程序上的值设置为可以使用的字段。
然后,当你有一个按钮时,调用处理程序的操作,如:
<h:commandButton action="#{Handler.doAction}" />
那么它就像从处理程序中调用一个方法一样简单!
希望这能有所帮助!