0

単純なデータ テーブルの例の並べ替えは、コントローラーのビュー スコープでは機能しますが、セッションでは機能しません。詳細については、次のコードを提供しました。ユーザー データのリストがテーブルに入力されます。

なぜそのような行動をするのか、誰にも手がかりがありますか?

モデル

...
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)+"user@mail.com", 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>
4

1 に答える 1

0

OK、私は問題が何であるかを発見しました。

AJAX を使用していますが、データ テーブルをラップする必要があります<h:form>

しかし、viewそれが必要ない範囲で、奇妙な...

ご協力ありがとうございます。

于 2013-03-20T10:08:59.750 に答える