【问题标题】:DataTable sorting and session scope not workingDataTable 排序和会话范围不起作用
【发布时间】:2013-03-19 17:12:17
【问题描述】:

简单数据表示例的排序使用 Controler 的视图范围,但不使用会话。 我在下面提供了我的代码以获取更多信息。 用户数据列表填充表格。

有人知道为什么会有这种行为吗?

型号

...
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>

【问题讨论】:

  • 您使用的是什么 viewscope 实现? “不工作”是什么意思?你能提供一些 stracetrace 吗?
  • 你确定你使用的是org.springframework.context.annotation包中的@Scope而不是javax.inject包中的一个吗?
  • 是的,这就是我正在使用的org.springframework.stereotype.Controller

标签: java spring jsf primefaces


【解决方案1】:

好的,我找到了问题所在。

虽然它使用 AJAX,但数据表必须包含在 &lt;h:form&gt; 中。

但是在view 范围内,这不是必需的,奇怪...

感谢您的友好合作,不胜感激。

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2013-12-01
    • 2014-08-26
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2019-06-02
    • 2013-05-16
    • 2017-03-15
    相关资源
    最近更新 更多