Java – how to reference a wicket page with parameters

I need to send wicket links (e.g. by email) to reference instances in the system

For example, a message might contain:

From:... @... To:... @... Subject: order pending

... text... Click here: http://I.dont.care.the.style.of.the.linkPage.OrderDetailPage?orderId=1001 ... text

I have two constructors for orderdetailpage

public class OrderDetailPage extends BasePage {

public OrderDetailPage(PageParameters parameters){
    this(OrderRepository.getById(parameters.getAsInteger("orderId")),null);
}


public OrderDetailPage(Order order,WebPage back) {
       super(new CompoundPropertyModel<Order>(order));
       //Renders the page for the order received.
       //back is the page we came from. Null hides link.

       ...
    }
...
}

I don't know how to send a link because I can't create a bookmarkable link because it looks for the default constructor... Of course, I don't

What I'm doing for another page is:

final PageParameters pars = new PageParameters();
pars.add("orderId","1001");

BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("alink",OrderDetailPage.class,pars); 

link.add(new Label("id","1001"));  
add(link);

Marking:

<li><a href="#" wicket:id="alink"><span wicket:id="id"/></a></li>

The generated URL is

http://localhost:8080/wicket/bookmarkable/packagePath.OrderDetailPage?orderId=1001

Yes, but the parameter constructor will still not be called

Fixed:

I solved the problem, but I know the solution won't work

public OrderDetailPage() {
        this(WicketApplication.orderRepository.get(Integer
                .parseInt(RequestCycle.get().getRequest()
                        .getRequestParameters().getParameterValue("orderId").toString())),null);

    }

Editor: I read something about "Mount" website. Is this feasible? What about?

Solution

Bookmarkablepagelink has two constructors: one is the default constructor for connecting to the linked page, and the other takes additional parameters to provide a link with pageparameters, which will call the constructor with pageparameters

You can create links like this:

PageParameters pars = new PageParameters();
pars.add("id",12345);
add(new BookmarkablePageLink("id",MyPage.class,pars);

This also applies to the setresponsepage method:

PageParameters pars = new PageParameters();
pars.add("id",12345);
setResponsePage(MyPage.class,pars);
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>