java - 点击按钮后Wicket添加方法

标签 java wicket

我有一个问题,如何在按钮单击后“重新加载”添加方法?例如:

ArrayList list = new ArrayList();
DataView dataView = new DataView("listview", new ListDataProvider(list)) {
    public void populateItem(final Item item) {
            final DBUser user = (DBUser) item.getModelObject();
            item.add(new Label("id", String.valueOf(user.getid())));
     }
};
final Load load = new Load(dataView);
    Form<?> form2 = new Form<Void>("form2") {
        @Override
        protected void onSubmit() {

            load.tick();
        }
};
add(dataView);

现在加载类:

public class Load {
private DataView dataView;

public Load(DataView dataView)
{
    this.dataView = dataView;
}

public DataView tick()
{
    Session session = HibernateUtil.getSessionFactory().openSession();//getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery(
            "from DBUser");
    ArrayList list = new ArrayList();
    for (Iterator it=query.iterate();it.hasNext();) {
        DBUser row = (DBUser) it.next();
        DBUser dbuser = new DBUser(row.getid());
        list.add(dbuser);
    }

    dataView = new DataView("listview", new ListDataProvider(list)) {
        public void populateItem(final Item item) {
            final DBUser user = (DBUser) item.getModelObject();
            item.add(new Label("id", String.valueOf(user.getid())));
        }
    };
    session.close();
    return dataView;
}

}

现在add(line)方法只被调用了一次,如何在每次点击按钮后调用它?

这是我的 .html

<table frame="below" border=1>
    <tr wicket:id="listview">
         <td align="center" width="40"><span wicket:id="id"></span></td>
     </tr>
 </table>

最佳答案

我认为,您可以通过以下方式重新加载 DataView:

Form<?> form2 = new Form<Void>("form2") {

    @Override
    protected void onSubmit() {
        StartPage.this.replace( load.tick() );
        // or you can use 
        // StartPage.this.addOrReplace( load.tick() ) 
        // instead
    }
};

但是你的代码也需要认真的重构!对于我来说,我会这样写以提高可读性:

final Load load = new Load();

Form<?> form2 = new Form<Void>("form2") {
    @Override
    protected void onSubmit() {
        StartPage.this.replace( createDataView( load.tick() ) );
    }
};
add(form2);

add( createDataView( new ArrayList() ) );

createDataView(list)方法的实现:

private DataView createDataView(List list) {
    return new DataView("listview", new ListDataProvider(list)) {
        public void populateItem(final Item item) {
            final DBUser user = (DBUser) item.getModelObject();
            item.add(new Label("id", String.valueOf(user.getid())));
        }
    };
}

Load类的实现:

public class Load {

    public List tick() {
        List result = new ArrayList();
        // ...
        // populate list from database
        // ...
        return result;
    }
}

希望这有帮助。

关于java - 点击按钮后Wicket添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751233/

相关文章:

java - 如何在没有 sudo 的情况下在 ubuntu 上将 java 的版本从 8 更改为 11

java - 有没有办法使用 Jackson 和/或其关联库之一(csv、json 等)将字符串转换为 Java 类型

java - 在二维数组中查找行的最大值和列的最小值

java - 是什么原因导致这个 ajax-upload javascript 错误?

java - Wicket 路径样式参数

java - 在 JProgressBar 顶部显示 JPanel

java - 如何排除 ArrayList 最后一个元素附加的字符

java - 提交表单时渲染 wicket 组件

WickeTester - 非法状态异常 : No CDI context bound to application

javascript - 有没有办法避免在 Apache Wicket 中转义 javascript 标签?