如果f:viewParam绑定到转换器,为什么我们需要Converter#getAsString

时间:2012-08-02 14:00:45

标签: jsf converter viewparams

说我有以下 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输入元素,但转换器在相反方向的作用对我来说没有意义

1 个答案:

答案 0 :(得分:1)

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

E.g。

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

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

由您决定是否按its contract实施getAsString()。如果不这样做,那么您的转换器根本不可用于其他组件。