0

我创建了一个 JSF 流。我的定义如下:

<flow-definition id="registration">
    <initializer>#{registrationBean.initializeFlow}</initializer>

    <start-node>personalDetails</start-node>

    <view id="personalDetails">
        <vdl-document>/registration/personal-details.xhtml</vdl-document>
    </view>

    <navigation-rule>
        <from-view-id>*</from-view-id>
        <navigation-case>
            <from-outcome>registration</from-outcome>
            <to-view-id>/registration/personal-details.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <navigation-rule>
        <from-view-id>/registration/personal-details.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>next</from-outcome>
            <to-view-id>/registration/cultural-details.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <navigation-rule>
        <from-view-id>/registration/cultural-details.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>previous</from-outcome>
            <to-view-id>/registration/personal-details.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>next</from-outcome>
            <to-view-id>/registration/profile-details.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <navigation-rule>
        <from-view-id>/registration/profile-details.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>previous</from-outcome>
            <to-view-id>/registration/cultural-details.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>next</from-outcome>
            <to-view-id>/registration/preview.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <navigation-rule>
        <from-view-id>/registration/preview.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>previous</from-outcome>
            <to-view-id>/registration/profile-details.xhtml</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/registration-complete.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>

    <flow-return id="cancel">
        <from-outcome>cancel</from-outcome>
    </flow-return>

    <finalizer>#{registrationBean.finalizeFlow}</finalizer>
</flow-definition>

当我通过 Faces Flow 时,实际流页面中没有问题,但是模板输出了一个奇怪的错误:

Unable to find matching navigation case from view ID '/registration/personal-details.xhtml' for outcome 'registration' 

where/registration/personal-details.xhtml是当前文件名,registration是当前 Flow Scope 的名称。

我在菜单中呈现的链接也呈现为:

Sign Up

在流程之外,或:

Sign Up: This link is disabled because a navigation case could not be matched.

流内。

同时,Glassfish 日志给了我这个:

Warning:   JSF1064: Unable to find or serve resource, /registration/registration.xhtml.

registration.xhtml不存在,但我想我可以通过更改<start-node>config.xml 来覆盖默认文件名。

有没有办法让我的文件结构保持非默认值并让它工作?究竟是什么问题?

4

2 回答 2

0

似乎第一个视图必须是registration.xhtml(或<FLOW_NAME>.xhtml一般情况下),所以我可以摆脱错误消息,从技术上讲,这“回答”了我的问题,但我希望能够以我认为合适的方式命名我的观点,并且如果可能的话不必默认,所以我会坚持一段时间来选择一个答案,以防有人对这个问题有更好的意见。

于 2014-05-30T14:16:17.053 回答
0

您可以使用 @Producer 方法中的 FlowBuilder 而不是 XML 配置来重命名起始页面(或使用任何目录中的任意面孔页面)。

见:https ://blog.oio.de/2014/02/12/a-comprehensive-example-of-jsf-faces-flow/

这需要从 face-config.xml 切换到基于代码的配置...基于 Faces/目录的配置不是很灵活,需要遵守标准约定。

于 2015-05-12T23:23:54.610 回答