我是jsf的新蜜蜂,我正在使用素面,在单选菜单的情况下,我不明白转换器是如何工作的。 我的困惑是,是否需要在formBean中将请求参数转换为对象,还是调用它来呈现我的列表? 在我的列表中如果我指定
<f:selectItems
value="#{granteeSelectionManager.getGrantProgramDTOs()}"
var="grantProgramDTO" itemLabel="#{grantProgramDTO.name}"
itemValue="#{grantProgramDTO.id}" />
如何渲染我的列表并指定转换器,转换器是否为列表中的每个项目调用?
请帮助我理解是否需要更新我的托管bean中的选择或渲染或两者兼而有之?
答案 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。