0

我是 jsf 的新手,我使用的是素面,我不明白转换器是如何工作的,以防单选菜单。我的困惑是,是否需要将请求参数转换为 formBean 中的对象,还是需要渲染我的列表?在我的列表中如果我指定

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

如何呈现我的列表并指定一个转换器,该转换器是为列表中的每个项目调用的?

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

4

1 回答 1

0

它用于两种情况。

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

提交表单时,转换器getAsObject()用于将提交的值(<option value>显示为 HTTP 请求参数)转换回具体的 Java 对象,以便可以通过<x:selectOneMenu value>.


您的特定情况下,您似乎使用对象自己的id属性作为项目值。在这种情况下,完全不需要转换器。您只需要确保它<x:selectOneMenu value>绑定到与 完全相同类型的属性<f:selectItem(s) itemValue>,这可能是Integeror Long

但是,如果您想像这样获取并设置一个具体的 Java 对象作为值

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

那么你肯定需要一个转换器,原因很简单,Java 对象不能在 HTML 输出和 HTTP 请求参数中表示,除非String先将它们转换为它们的唯一表示。从 Java 的角度来看,HTML 输出基本上是一个大String文件,HTTP 请求参数是每个定义 String的。

也可以看看:

于 2013-07-29T14:48:34.047 回答