在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与否。如果你不这样做,那么你的转换器就根本不能重用其他组件。
奇怪地使用Mojarra 2.1.23一个转换器绑定到一个''侧负载调用5次'getAsString'。当我试图在所提到的方法中抛出一个UnsupportedOperationException异常时,看到了这种行为。 –
djmj
2013-08-23 00:22:56