Каждый раз, когда я делаю запрос Ajax в JSF2, я получаю новый сессионный компонент, почему? - PullRequest
3 голосов
/ 07 октября 2011

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

...... imports ......
@Named(value = "userController")
@SessionScoped
public class UserController implements Serializable {

private User current;
private DataModel items = null;
@EJB
private br.com.cflex.itm.dataaccess.UserFacade ejbFacade;
private PaginationHelper pagination;
private int selectedItemIndex;

public UserController() {
}

public Collection<Project> getMyProjectList(){
    String login = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();
    User u = ejbFacade.getUserFromLogin(login);
    return u.getProjectCollection();
}    

public User getSelected() {               
    if (current == null) {
        current = new User();
        selectedItemIndex = -1;
    }
    return current;
} 
....... rest of class ....

Каждый раз, когда я делаю этот запрос, я получаю новыйНасколько я знаю, я должен снова и снова получать одного и того же парня.

    <h:panelGrid columns="2" cellpadding="2">
      <h:form>
       <h:outputText value="#{bundle.FirstName}"/>                                
         <h:inputText id="name" value="#{userController.selected.name}">
          <f:ajax event="keyup" execute="name" render="out" />
<!--       <f:ajax event="keyup" render="out"/>-->
           </h:inputText>
           <p>
            <h:commandButton value="add"></h:commandButton>      
            <h:outputText id="out" value="#{userController.selected.name}"/>
           </p>
      </h:form>
    </h:panelGrid>

1 Ответ

4 голосов
/ 07 октября 2011

Это может произойти, если вы случайно импортировали @SessionScoped из пакета javax.faces.bean вместо пакета javax.enterprise.context.

Вы используете @javax.inject.Named аннотация, поэтому следует импортировать области действия из пакета javax.enterprise.context.Области действия из пакета javax.faces.bean работают только в сочетании с аннотацией @javax.faces.bean.ManagedBean.

Компонент CDI без действительной области действия будет вести себя как @RequestScoped.Бин JSF без допустимой области действия будет вести себя как @NoneScoped.

...