我的检票口应用程序有点问题。

问题出在一个名为OverviewPage的页面上,这是一些面板(例如ListPanel),我的RepeatingView位于其中。

这个RepeatingView(列表)有一些项目,每个项目都有一个按钮,如果我按下按钮,我将被重定向到另一个页面(RegistrationPage),并且对RepeatingView(列表)进行了一些更改。

如果现在我使用RepeatingView(列表)导航回到OverviewPage,则该列表与以前完全相同。我对列表项进行了更改,但它们不可见。 (我没有按浏览器的后退按钮,而是单击了导航链接)

我知道在整个会话过程中都会出现检票页面实例。我可以告诉检票口重新渲染此页面/列表吗?有什么可能性?可以吗

谢谢

编辑:

以下是包含RepeatingView的面板:

/**
 *
 * Constructor...
 *
 * @param id
 */
public ServiceListPanel(String id) {

    super(id);

    RepeatingView repeating = new RepeatingView("repeating");
    add(repeating);

    int index = 0;

    // add all services to the list

    for (Service service : databaseService.getAllServices()) {

        AbstractItem item = new AbstractItem(repeating.newChildId());

        repeating.add(item);

        item.add(new ActionPanel("actions", new Model<Service>(service)));

        item.add(new Label("name", service.getName()));
        item.add(new Label("description", service.getDescription()));
        item.add(new Label("country", service.getCountry()));

        final int idx = index;
        item.add(AttributeModifier.replace("class", new AbstractReadOnlyModel<String>() {

            private static final long   serialVersionUID    = 1L;

            @Override
            public String getObject() {

                return (idx % 2 == 1) ? "even" : "odd";
            }
        }));

        index++;
    }

}


下一个是应进行更改的ActionPanel:

/**
 *
 * Constructor...
 *
 * @param id
 * @param model
 */
public ActionPanel(String id, final IModel<Service> model) {

    super(id);

    Link<?> link;

    ContextImage image;

    final ServiceUserDetails user = getSession().getUser();

    final Service service = model.getObject();

    // Check for groups and customize the link to subscribe or unsubscribe

    if (checkUserGroups(user, service)) {

        image = new ContextImage("img", "template/img/unsubscribe.gif");

        link = new Link<Void>("select") {

            /**  */
            private static final long   serialVersionUID    = -2153508505463870485L;

            /**
             *
             * @see org.apache.wicket.markup.html.link.Link#onClick()
             */
            @Override
            public void onClick() {

                ServiceRequest req = new ServiceRequest(service, user, "DELETE");

                serviceProcessor.handleServiceRequest(req);

                setResponsePage(new RegistrationPage());



            }
        };

    } else { // user is not in group

        image = new ContextImage("img", "template/img/subscribe.gif");

        link = new Link<Void>("select") {

            /**  */
            private static final long   serialVersionUID    = -2153508505463870485L;

            /**
             *
             * @see org.apache.wicket.markup.html.link.Link#onClick()
             */
            @Override
            public void onClick() {

                ServiceRequest req = new ServiceRequest(service, user, "PUT");

                serviceProcessor.handleServiceRequest(req);

                setResponsePage(new RegistrationPage());


            }
        };

    }

    link.add(image);

    add(link);

}


如您所见,我要更改的唯一内容是一个图像,即链接图像。订阅或取消订阅服务。列表项保持不变。

我对检票口很陌生,也许这就是我的问题。

希望现在能更好地解释它。

最佳答案

为您的actionPanel提供LoadableDetachableModel而不是普通的Model。 LDM总是获取新的对象,因此这可以解决您的问题。您可能需要重构代码很多。

上一次使用DataTable遇到类似的问题,它有所帮助。

关于java - Wicket RepeatingView刷新/重新渲染?可能吗[缺少物品],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16419868/

10-10 23:58