2013-03-19 3 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

viewscope 구현은 무엇입니까? "일하지 않는다"는 것은 무엇을 의미합니까? 스트레이켓을 드릴까요? –

+1

'org.springframework.context.annotation' 패키지에서'@ Scope'을 사용하고'javax.inject' 패키지에서'@ Scope'을 사용하고 있습니까? – partlov

+0

예, org.springframework.stereotype.Controller'를 사용하고 있습니다. –

답변

0

OK, 나는 문제가 무엇을 발견했다.

AJAX를 사용하지만 데이터 테이블은 <h:form>으로 묶어야합니다.

그러나 이상 필요하지 않은 것 view 범위 ... 당신의 친절한 협력을위한

덕분에, 그것을 주셔서 감사합니다.

관련 문제