java - 将 setter 方法中组件的 id 传递给 ManagedBean

标签 java jsf jsf-2

嗯,我的 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”(父级)而不是日历。

UIComponent ui = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());

最佳答案

您可以创建一个处理程序 bean,它将获取所有参数并将它们放入一个数组中。您可以使用循环为数组中的每个元素调用 setParam()

一个例子是:

如果您需要来自 inputText 的信息,请在您的页面上:

<h:inputText id="id" value="#{Handler.id}"></h:inputText>

这会将处理程序上的值设置为您可以使用的字段。

然后,当您有一个按钮时,从您的处理程序中调用一个操作,例如:

<h:commandButton action="#{Handler.doAction}" />

然后就像从处理程序中调用方法一样简单!

希望这有帮助!

关于java - 将 setter 方法中组件的 id 传递给 ManagedBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331339/

相关文章:

java - 无法使用 Spring 创建 Innerbean - BeanInstantiationException 未找到默认构造函数

javascript - 如何使用 Watir 单击由 javascript 生成的元素?

jsf - 为什么 getQueryString() 在带有 h :commandButton 的 jsf 支持 bean 中不起作用

java - 测试和主要资源的 Spring @Value 资源注入(inject)

java - getFragmentManager().findFragmentById 返回 null

java - 使用 Spring 集成轮询 S3 存储桶中的文件

java - 谷歌应用引擎: f:setPropertyActionListener with p:ajax

jsf - 如何设置h :selectOneRadio button的默认值

java - 如何在managedBean之间传递参数

jsf-2 - 标签索引不起作用 Richfaces 弹出面板