如何在Java中获取UIComponent值?

时间:2014-12-22 23:23:42

标签: jsf

我的JSF controller中有一个方法,该方法由嵌套在可视组件内的ajax标签调用(实际上与哪一个无关)。该方法采用类型AjaxBehaviorEvent的单个参数,我可以从中获取调用HTML可视化组件的Java表示形式为UIComponent,并将其向下转换为其特定的相应类型(例如h:inputText } {}对应HtmlInputText)。

据我所知,在大多数情况下,通过引用窗体字段在视图中映射到的控制器或实体[g | s] etters,可以轻松检索HTML可视组件的值。但是,在我的特定情况下,我想通过Java对象呈现来获取可视组件的值(在我的例子中是一个表单字段)。在研究faces API时,我找到了读取对象的各种属性的方法,例如IDcontext,但不是组件当前在视图中保存的值。

有人可以解释我是否只是找不到正确的阅读方式,或者设计是这样的?如果是后者,你能解释为什么它的设计是这样的吗?是禁用"后门"访问表单字段而不是通过视图映射?

1 个答案:

答案 0 :(得分:5)

有很多方法可以从组件中提取值。按照您已有的内容UIInputt#getValue()UIInput#getSubmittedValue()提供价值。

UIInput#getSubmittedValue()仅适用于JSF请求的APPLY_REQUEST_VALUESVALIDATE阶段之间。之后的所有其他阶段,使用UIInputt#getValue()。您将使用UIInput代替您从事件中提取的原始UIComponentUIInput扩展UIComponent,并且它是所有输入的父类接受用户编辑值的组件)。您将拥有的最终结果如下:

     UIInput theInput = (UIInput)event.getSource();
     Object theValue = theInput.getValue();

还有其他方法(不是干净的)来获取请求生命周期中的值