在F的情况下:viewParam绑定到一个转换器,为什么我们需要转换#符getAsString

问题描述:

说我有以下F:viewParam定义:在F的情况下:viewParam绑定到一个转换器,为什么我们需要转换#符getAsString

<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> 

我浏览到预期的页面用“?cust-id = 2342”参数,因此转换器中的getAsObject方法的作用是显式实例化后台bean中的Customer字段(例如,通过基于cust-id值进行数据库查询)。 我不清楚的是为什么我们需要getAsString方法以及如何使用它。在通常情况下,这不是关于getAsString在转换器中的角色的问题,即在视图UI元素与其角色是直接的角色的支持bean之间的绑定中。我还读here,我们可以将f:viewParam作为GET参数的UI输入元素,但转换器在相反方向的作用对我来说没有意义。

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> 

这取决于你是否执行getAsString()its contract与否。如果你不这样做,那么你的转换器就根本不能重用其他组件。

+0

奇怪地使用Mojarra 2.1.23一个转换器绑定到一个''侧负载调用5次'getAsString'。当我试图在所提到的方法中抛出一个UnsupportedOperationException异常时,看到了这种行为。 – djmj 2013-08-23 00:22:56