在从一个页面导航到另一个页面(View Scope)时设置辅助bean中的属性不起作用

fre*_*dev 1 java spring jsf-2

Authority在视图范围内有一个支持bean ,我有两个页面viewRoleseditRole映射到这个支持bean.

viewRoles页面中有一个转到editRole页面的链接:

<h:form>
  <h:commandLink value="#{au.displayName}" action="pretty:editRole">
    <f:setPropertyActionListener target="#{authority.authorityId}" value="#{au.id}"/>                   
  </h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)

它导航到另一个页面,但该属性未设置,即使bean位于视图范围内并且两个页面都映射到同一个辅助bean.它仅在我将视图范围更改为会话范围时才有效.

注意:我的bean是由Spring管理的,这个视图范围也不是JSF的默认值@ViewScoped,它是我在http://cagataycivici.wordpress.com/2010/02/17/port-jsf-2-0s上找到的自定义范围.-viewscope-to-spring-3-0 /.我也使用PrettyFaces来管理我的导航.

问题是,上述场景是否应该与真正的JSF2一起使用,@ViewScoped @ManagedBean还是与Spring相关的问题或其他问题?请指教.

Bal*_*usC 5

不,这也不适用于JSF2 @ViewScopedbean.您基本上导航到不同的视图.一个@ViewScoped作为你与交互豆住,只要同一视图通过返回nullvoid在操作方法.<f:param><f:viewParam>目标视图中结合使用命令链接应该这样做.

例如在命令链接中:

<h:form>
  <h:commandLink value="#{au.displayName}" action="pretty:editRole">
    <f:param name="authorityId" value="#{au.id}"/>                   
  </h:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)

并在目标视图中:

<f:metadata>
    <f:viewParam name="authorityId" value="#{authority.authorityId}"
        required="true" requiredMessage="Invalid page access. Please use a link from within the system."
    />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)