我想在标签内的页面之间导航,这是我的代码:
<p:tabView id="tabView">
                <p:tab id="tab1" title="Gestion des Utilisateur" titleStyle="titre">
                    <ui:include src="#{directionpage.page}" />
                </p:tab>
                <p:tab id="tab2" title="Gestion des Equipes">
                   <ui:include src="#{directionpage.page2}" />
                </p:tab>
            </p:tabView>
directionpage jsf托管bean有这个变量String Static page;,我想更改其他托管bean中的页面值以导航到其他页面.但我有这个错误:类'com.jsfmanagedbean.directionpage'没有可读属性'page'.
这是我的jsf托管bean
package com.jsfmanagedbean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@SessionScoped
@ManagedBean
public class directionpage {
    public static String page="/admin/gestiondesuser/usergestion.xhtml";
    public static String page2="/admin/gestiondesequipe/gestiondesequipe.xhtml";
    public static String getPage() {
        return page;
    }
    public static void setPage(String page) {
        directionpage.page = page;
    }
    public static String getPage2() {
        return page2;
    }
    public static void setPage2(String page2) {
        directionpage.page2 = page2;
    }
    public directionpage() {
    }
}
我试图改变其他托管bean中的页面值,如下所示:
directionpage.page="/admin/gestiondesuser/createuser.xhtml";
那么我如何才能从其他被管理的bean中更改managedbean的静态值?
您的代码有一些严重的问题:
不要使用静态变量来保存特定于用户的数据.因为当多个用户使用您的应用程序时,它们将共享相同的静态变量,因为所有静态变量都是类范围的,而不是实例范围的.现在你的代码不是线程安全的.
当您尝试从xhtml代码访问managedBean时,实际上是引用类实例,而不是类本身.JSF遵循JavaBean约定并使用实例变量的getter/setter来访问实例变量.因为你的'page'变量及其getter/setter方法是类范围的(静态的),所以JSF无法访问提到的变量.阅读JavaBean约定,再次使用静态变量.
尝试遵循提到的ojota84的Java命名约定.这是一个很好的博客:http://blog.sanaulla.info/2008/06/25/camelcase-notation-naming-convention-for-programming-languages/
如果您的托管bean没有实现Serializable接口,它会产生一些副作用.尝试使您的bean可序列化.
通过更改托管bean中的变量导航到其他页面并不是处理JSF中导航的完美方式.我看到你正在使用PrimeFaces,所以我建议你先阅读JSF文档和PrimeFaces文档.我不知道你想要实现什么,所以我现在不能就此问题多说些什么.
对于您当前的问题,改为使用这种方法(我没有测试代码):
@SessionScoped
@ManagedBean
public class DirectionPage implements Serializable {
    private String page="/admin/gestiondesuser/usergestion.xhtml";
    private String page2="/admin/gestiondesequipe/gestiondesequipe.xhtml";
    public String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    public String getPage2() {
        return page2;
    }
    public void setPage2(String page2) {
        this.page2 = page2;
    }
    public directionpage() {
    }
}
你可以改变另一个bean的值
@SessionScoped
@ManagedBean
public class AnotherBean implements Serializable {
@ManagedProperty("#{directionPage}")
private DirectionPage directionPage;
  public void setDirectionPage(DirectionPage directionPage) {
     this.directionPage = directionPage;
  }
  public DirectionPage getDirectionPage() {
     return directionPage;
  }
  public void changePage() {
     directionPage.setPage("whateverPage");
  }
}
希望这可以帮助.
| 归档时间: | 
 | 
| 查看次数: | 847 次 | 
| 最近记录: |