2011-01-03 4 views
2

Я собираюсь передать параметр с одной страницы (Facelet) в управляемый компонент, объем которого представлен View Scope.Параметр прохождения для ViewScoped Bean

Я пытаюсь сделать это следующим образом:

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class Mybean { 
    private int id; 


    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    }  
} 

Первая страница:

<h:body>    
    <h:form> 
     <h:commandLink value="click" action="index"> 
     <f:setPropertyActionListener target="#{mybean.id}" value="20"/> 
     </h:commandLink> 
    </h:form> 
    </h:body> 

вторая страница:

<h:body> 
    param value #{param.id} 
    <br /> 
    bean value #{mybean.id} 
    <br /> 

    <h:messages/> 
    </h:body> 

Но он не показывает 20

ответ

1

@ViewScoped bean остается только для просмотра, которое пользователь просматривает.

Как только пользователь переключился на другой вид - бит уничтожается и создается с нуля. Поэтому, если вы хотите использовать один и тот же компонент для более чем одной страницы, используйте bean-компонент @SessionScoped.

Другой способ - создать класс Singleton на Java, и один компонент будет обновлять значение в этом классе, в то время как другой компонент извлекает из него значение.

+0

Вы правы, и я тоже могу изменить его на RequestScope, верно? – ehsun7b

+2

Класс singleton сохранит значения как компонент ApplicationScoped! Я имею в виду, что значение будет одинаковым для всех посетителей, не будет? – ehsun7b

+0

Вы правы! поэтому вы можете использовать компонент области сеанса для хранения значений, если это для многих пользователей – Dejell

Смежные вопросы