Как ссылаться на страницу с параметрами Wicket - PullRequest
3 голосов
/ 22 сентября 2011

Мне нужно отправить ссылки Wicket (например, через почту), которые ссылаются на экземпляры в системе.

Например, почта может содержать:

From: ... @... To: ... @ ... Тема: отложенный ордер

... txt ... Нажмите здесь, чтобы перейти: http://I.dont.care.the.style.of.the.linkPage.OrderDetailPage? OrderId = 1001 ... txt...

У меня есть два конструктора этого 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.

       ...
    }
...
}

Я не знаю, как отправлять ссылки, потому что я не могу создать закладку, потому что она ищетконструктор по умолчанию ... и, конечно, у меня его нет.

Что я делаю для другой страницы:

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);

Разметка:

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

Сгенерированный URL-адрес

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

Это нормально, но, тем не менее, не вызывает конструктор «параметров».

ИСПРАВЛЕНИЕ:

Я исправляю это, ноЯ знаю, что решение НЕ в порядке.

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

    }

РЕДАКТИРОВАТЬ: я читал что-то о "монтировании" URL, может ли это работать?Как?

1 Ответ

13 голосов
/ 22 сентября 2011

BookMarkablePageLink имеет 2 конструктора: один для подключения к конструктору по умолчанию на связанной странице, а другой - с дополнительным параметром для предоставления ссылки с PageParameters, который вызовет конструктор с PageParameters.

Вы создаете ссылку так:

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

Это также работает с методом setResponsePage:

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