2013-03-19 2 views
0

Сортировка простого примера таблицы данных работает с областью просмотра Controler, но не с сеансом. Я предоставил свой код ниже для получения дополнительной информации. Список данных пользователя заполняет таблицу.Сортировка и сеанс данных DataTable

Кто-нибудь знает, почему такое поведение?

Модель

... 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private Long mId; 
    private String mUsername; 
    private String mPassword; 
    private String mEmail; 
    private Date mBirthdate; 

    public User() { 
    } 

    public User(Long aId, String aUsername, String aPassword, String aEmail, 
      Date aBirthdate) { 
     super(); 
     mId = aId; 
     mUsername = aUsername; 
     mPassword = aPassword; 
     mEmail = aEmail; 
     mBirthdate = aBirthdate; 
    } 

    .... 
} 

Контроллер

...  
@Controller("register") 
@Scope("session") 
public class Register implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private User mUser; 
    private List<User> mUsers = new LinkedList<User>(); 
    private char[] mChars = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 

    public Register() { 
    } 

    @PostConstruct 
    public void init() { 
     mUser = new User(); 

     for (int i = 0; i < 10; i++) { 
      mUsers.add(new User(1L, randStr(3)+"_user", randStr(1)+"pass", randStr(1)+"[email protected]", new Date())); 
     } 
    } 

    public User getUser() { 
     return mUser; 
    } 

    public List<User> getUsers() { 
     return mUsers; 
    } 

    public void submit() { 
     FacesMessage msg = new FacesMessage("Registration successful"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 
    private String randStr(int len){ 
     StringBuilder sb = new StringBuilder(); 
     Random random = new Random(); 
     for (int i = 0; i < len; i++) { 
      char c = mChars[random.nextInt(mChars.length)]; 
      sb.append(c); 
     } 
     return sb.toString(); 
    } 

} 

Посмотреть

<p:dataTable value="#{register.users}" var="usr" paginator="true" rows="4" sortBy="#{usr.username}"> 
    <p:column headerText="a" sortBy="#{usr.username}"> 
     <h:outputText value="#{usr.username}"></h:outputText> 
    </p:column> 
    <p:column headerText="b" sortBy="#{usr.password}"> 
     <h:outputText value="#{usr.password}"></h:outputText> 
    </p:column> 
    <p:column headerText="c" sortBy="#{usr.email}"> 
     <h:outputText value="#{usr.email}"></h:outputText> 
    </p:column> 
</p:dataTable> 
+0

Что такое реализация viewcope, вы используете? Что вы имеете в виду «не работает»? Не могли бы вы предоставить какой-нибудь страт? –

+1

Вы уверены, что используете '@ Scope' из пакета' org.springframework.context.annotation', а не один из пакета 'javax.inject'? – partlov

+0

Да, это то, что я использую 'org.springframework.stereotype.Controller' – 2013-03-20 10:03:02

ответ

0

ОК, я обнаружил, что это проблема.

Хотя он использует AJAX, таблица данных должна быть обернута в <h:form>.

Однако в view объеме, что не требуется, странно ...

Спасибо за ваше любезное сотрудничество, оценить его.

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