我的JSF
controller
中有一个方法,该方法由嵌套在可视组件内的ajax
标签调用(实际上与哪一个无关)。该方法采用类型AjaxBehaviorEvent
的单个参数,我可以从中获取调用HTML可视化组件的Java表示形式为UIComponent
,并将其向下转换为其特定的相应类型(例如h:inputText
} {}对应HtmlInputText
)。
据我所知,在大多数情况下,通过引用窗体字段在视图中映射到的控制器或实体[g | s] etters,可以轻松检索HTML可视组件的值。但是,在我的特定情况下,我想通过Java对象呈现来获取可视组件的值(在我的例子中是一个表单字段)。在研究faces
API时,我找到了读取对象的各种属性的方法,例如ID或context,但不是组件当前在视图中保存的值。
有人可以解释我是否只是找不到正确的阅读方式,或者设计是这样的?如果是后者,你能解释为什么它的设计是这样的吗?是禁用"后门"访问表单字段而不是通过视图映射?
答案 0 :(得分:5)
有很多方法可以从组件中提取值。按照您已有的内容UIInputt#getValue()
和UIInput#getSubmittedValue()
提供价值。
UIInput#getSubmittedValue()
仅适用于JSF请求的APPLY_REQUEST_VALUES
和VALIDATE
阶段之间。之后的所有其他阶段,使用UIInputt#getValue()
。您将使用UIInput
代替您从事件中提取的原始UIComponent
(UIInput
扩展UIComponent
,并且它是所有输入的父类接受用户编辑值的组件)。您将拥有的最终结果如下:
UIInput theInput = (UIInput)event.getSource();
Object theValue = theInput.getValue();
还有其他方法(不是干净的)来获取请求生命周期中的值