2013-05-10 2 views
-2

я хочу перемещаться между страницами внутри вкладки это мой код:навигация между страницами с JSF

<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 управляемого компонент имеет эту переменную String Static page; и я хочу изменить значение страницы в других управляемых компонентах для перехода на другую страницу. но у меня есть эта ошибка: Класс 'com.jsfmanagedbean.directionpage' не имеет читаемой страницы свойств.

и это мой JSF управляемого компонент

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() { 
    } 
} 

я судимый изменить значение страницы в другом управляемом компоненте, как это:

directionpage.page="/admin/gestiondesuser/createuser.xhtml"; 

так, как я могу изменить статическое значение managedbean от другой управляемой?

+3

Прежде всего, вы можете попробовать следовать соглашениям об именовании. DirectionPage как имя класса. Затем добавьте переменные как частные и проверьте, работает ли это. –

ответ

8

Ваш код имеет некоторые серьезные проблемы:

  1. Не использовать статические переменные для хранения пользовательских конкретных данных. Поскольку, когда более одного пользователя использует ваше приложение, они будут использовать одну и ту же статическую переменную, так как все статические переменные являются областями класса, а не областями экземпляров. Прямо сейчас ваш код не является потокобезопасным.

  2. Когда вы пытаетесь получить доступ к вашему управляемому банку из кода xhtml, вы действительно ссылаетесь на экземпляр класса, а не на сам класс. JSF следует за соглашениями JavaBean и использует getters/setters переменной экземпляра для доступа к переменным экземпляра. Поскольку ваша переменная 'page' и ее методы getter/setter относятся к классу (статические), JSF не может получить доступ к указанной переменной. Читайте о соглашениях JavaBean и снова, не используйте статические переменные.

  3. Постарайтесь следовать соглашениям о присвоении имен Java, как упомянуто ojota84. Вот хороший блог об этом: http://blog.sanaulla.info/2008/06/25/camelcase-notation-naming-convention-for-programming-languages/

  4. Он имеет некоторые побочные эффекты, если ваши управляемые компоненты не реализуют интерфейс Serializable. Попробуйте сделать ваши фасоль Serializable.

  5. Перемещение на другие страницы путем изменения переменной в управляемом компоненте - не идеальный способ обработки навигации в 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() { 
    } 
} 

И вы можете изменить значение из другого бин, как

@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"); 
    } 

} 

Надеется, что это помогает.

+0

+1 за хороший ответ. – Makky

+0

@Ozan Я использовал ваш код, но я получаю эту ошибку: java.lang.NullPointerException – osselosse

+0

переменная isnt change with directionPage.setPage ("whateverPage"); все еще имеют такое же значение – osselosse