如何在<navigation-case> <redirect> <view-param>

时间:2015-11-05 16:47:27

标签: jsf jsf-2 navigation converter viewparams

我正在开发一个需要转换为遵循POST-redirect-GET模式的Web应用程序。在这种情况下,需要在重定向中传递视图范围的托管bean,因此页面仍然可以正常工作。所以为了做到这一点,我在faces-config中添加了一个导航案例,该案例将在重定向中传递view-param

<navigation-rule>
    <from-view-id>page1.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{actionClass.Submit}</from-action>
        <from-outcome>submit</from-outcome>
        <to-view-id>page1.xhtml</to-view-id>
        <redirect>
            <view-param>
                <name>viewScopedBean</name>
                <value>#{actionClass.viewScopedBean}</value>
            </view-param>
        </redirect>
    </navigation-case>
</navigation-rule>

该操作是执行设置viewScopedBean

的操作

在我的jsf页面中,我有

<f:metadata>
    <f:viewParam name="viewScopedBean" id="viewScopedBean" 
        value="#{actionClass.viewScopedBean}" converter="customConverter"/>
    <f:event type="preRenderView" listener="#{actionClass.initialize}" />
</f:metadata>

转换器看起来工作(getAsString返回的字符串传递给getAsObject转换它),除非重定向完成。进入的字符串是viewScopedBean的toString,而不是我的自定义转换器类的getAsString方法中的内容,因此我得到了一个异常。

这应该是预期的吗?我错过了什么吗?转换器如何在具有view-params的应用程序流中工作?

编辑:经过一些搜索,我发现getAsObject在调用viewScopedBean而不是{{{{}}}之后接收toString的{​​{1}}作为字符串参数的原因1}}转换。这种情况正在发生,因为一旦我的提交完成,重定向就会发生,并且不会呈现HTML,因此actionClass.submit不会呈现,因此getAsString的字符串代表是其<f:viewParam>返回值。

0 个答案:

没有答案