【问题标题】:in case of an f:viewParam bound to a converter, why do we need the Converter#getAsString如果 f:viewParam 绑定到转换器,为什么我们需要 Converter#getAsString
【发布时间】:2012-07-31 12:26:13
【问题描述】:

假设我有以下 f:viewParam 定义:

<f:metadata>
    <f:viewParam name="cust-id" value="#{CustomerCEVController.customer}" 
        converter="#{customerConverter}" converterMessage="Unknown customer, please use a link from within the system."
        required="true" requiredMessage="cust-id f:viewParam not present"
    />
</f:metadata>

我在 URL 中使用“?cust-id=2342”参数导航到目标页面,因此转换器中 getAsObject 方法的作用显然是在支持 bean(例如,通过基于 cust-id 值进行数据库查询)。 我不太清楚为什么我们需要 getAsString 方法以及它是如何使用的。这不是关于 getAsString 在通常情况下在转换器中的角色的问题,即在 .xhtml 视图 UI 元素和支持 bean 之间的绑定中它们的角色很简单。我还阅读了here,我们可以将 f:viewParam 视为 GET 参数的 UI 输入元素,但转换器在相反方向的作用对我来说没有意义。

【问题讨论】:

    标签: jsf converter viewparams


    【解决方案1】:

    getAsString()&lt;f:viewParam&gt; 的情况下确实不使用,但现有转换器可以重用 用于真正使用getAsString() 的其他组件。

    例如

    <h:outputText value="#{CustomerCEVController.customer}" converter="#{customerConverter}" />
    

    <h:selectOneMenu value="#{CustomerCEVController.customer}" converter="#{customerConverter}">
        <f:selectItems value="#{data.customers}" />
    </h:selectOneMenu>
    

    是否按照its contract 实现getAsString() 取决于您。如果您不这样做,那么您的转换器将根本无法用于其他组件。

    【讨论】:

    • 奇怪地使用 Mojarra 2.1.23 绑定到 &lt;f:viewParam&gt; 的转换器在侧负载调用 5 次 getAsString。当我尝试在上述方法中抛出 UnsupportedOperationException 异常时看到了这种行为。
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    相关资源
    最近更新 更多