Jsf 2 jsf2转换器用于更新模型或渲染

Jsf 2 jsf2转换器用于更新模型或渲染,jsf-2,Jsf 2,我是jsf的新手,我使用的是素数面,我不了解转换器是如何工作的,在单选菜单的情况下。 我的困惑是,它是用于在formBean中将请求参数转换为对象,还是用于呈现我的列表? 在我的列表中,如果我指定 <f:selectItems value="#{granteeSelectionManager.getGrantProgramDTOs()}" var="grantPr

我是jsf的新手,我使用的是素数面,我不了解转换器是如何工作的,在单选菜单的情况下。 我的困惑是,它是用于在formBean中将请求参数转换为对象,还是用于呈现我的列表? 在我的列表中,如果我指定

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

如何呈现我的列表并指定转换器,列表中的每个项目都会调用转换器


请帮助我理解是为了更新托管bean中的选择而调用它,还是为了渲染或两者都调用它?

这两种情况都使用它

呈现列表时,转换器的
getAsString()
用于将
后面的Java对象转换为
字符串,该字符串依次呈现为
(该字符串又用作HTTP请求参数)。这确实是按项目进行的

提交表单时,转换器的
getAsObject()
用于将提交的值(显示为HTTP请求参数的
)转换回具体的Java对象,以便可以通过
在模型(支持bean)中进行设置


在您的特定情况下,您似乎使用对象自己的
id
属性作为项值。在这种情况下,完全不需要转换器。您只需确保
绑定到与
类型完全相同的属性,该属性可能是
整数

但是,如果您想获得一个具体的Java对象并将其设置为如下所示的值

<h:selectOneMenu value="#{bean.grantProgramDTO}">
    <f:selectItems ... itemValue="#{grantProgramDTO}" />
</h:selectOneMenu>

然后,您肯定需要一个转换器,原因很简单,如果不先将Java对象转换为其唯一的
字符串
表示,就无法在HTML输出和HTTP请求参数中表示Java对象。在Java透视图中,HTML输出基本上是一个大的
String
,HTTP请求参数是
String
s

另见: