【问题标题】:jsf2 converter usage for update model or renderjsf2 转换器用于更新模型或渲染
【发布时间】:2013-07-29 13:53:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    这两种情况都使用。

    当列表被渲染时,转换器的getAsString() 用于将&lt;f:selectItem(s) itemValue&gt; 后面的Java 对象转换为String,而String 又被渲染为&lt;option value&gt;(又被用作HTTP 请求参数) .这确实是按项目完成的。

    当表单提交时,转换器的getAsObject() 用于将提交的值(&lt;option value&gt;,作为 HTTP 请求参数出现)转换回具体的 Java 对象,以便可以在模型中设置它(支持bean)通过&lt;x:selectOneMenu value&gt;


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

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

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

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

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2011-03-01
      • 2014-09-18
      相关资源
      最近更新 更多