如何在Java中获取UIComponent值?

amp*_*ent 3 jsf

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

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

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

kol*_*sus 5

有许多方法可以从组件中提取值.由什么你已经有了打算UIInputt#getValue(),并UIInput#getSubmittedValue()会提供的价值.

UIInput#getSubmittedValue()是适合于只之间的目的APPLY_REQUEST_VALUESVALIDATEJSF请求的阶段.所有其他阶段之后,使用UIInputt#getValue().您将使用UIInput而不是UIComponent从事件中提取的原始数据(UIInput扩展UIComponent,它是接受用户编辑值的所有输入组件的父类).你将拥有的最终结果如下:

     UIInput theInput = (UIInput)event.getSource();
     Object theValue = theInput.getValue();
Run Code Online (Sandbox Code Playgroud)

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