用于更新模型或渲染的jsf2转换器用法

时间:2013-07-29 13:53:32

标签: jsf-2

我是jsf的新蜜蜂,我正在使用素面,在单选菜单的情况下,我不明白转换器是如何工作的。 我的困惑是,是否需要在formBean中将请求参数转换为对象,还是调用它来呈现我的列表? 在我的列表中如果我指定

<f:selectItems
                                value="#{granteeSelectionManager.getGrantProgramDTOs()}"
                                var="grantProgramDTO" itemLabel="#{grantProgramDTO.name}"
                                itemValue="#{grantProgramDTO.id}" />

如何渲染我的列表并指定转换器,转换器是否为列表中的每个项目调用?

请帮助我理解是否需要更新我的托管bean中的选择或渲染或两者兼而有之?

1 个答案:

答案 0 :(得分:0)

它用于两种情况。

当呈现列表时,转换器的getAsString()用于将<f:selectItem(s) itemValue>后面的Java对象转换为String,而<option value>又呈现为getAsObject()(在turn用作HTTP请求参数)。这确实是基于每个项目完成的。

提交表单时,转换器的<option value>用于将提交的值(显示为HTTP请求参数的<x:selectOneMenu value>)转换回具体的Java对象,以便可以将其设置为模型(支持bean)通过id


您的特定情况中,您似乎使用对象自己的<x:selectOneMenu value>属性作为项值。在这种情况下,完全不需要转换器。您只需要确保<f:selectItem(s) itemValue>绑定到与Integer完全相同的属性,可能是Long<h:selectOneMenu value="#{bean.grantProgramDTO}"> <f:selectItems ... itemValue="#{grantProgramDTO}" /> </h:selectOneMenu>

但是,如果您想要将具体的Java对象设置为值,那么

String

然后你肯定需要一个转换器,原因很简单,Java对象无法在HTML输出和HTTP请求参数中表示,而不首先将它们转换为唯一的String表示。在Java透视图中,HTML输出基本上是一个大String,HTTP请求参数是per definition {{1}} s。

另见: