FeedbackPanel与链接

时间:2017-03-21 09:31:53

标签: java wicket

是否有任何解决方案可用于构建包含内部带有链接消息的反馈面板?我试着用这个:

            StringBuilder stringBuilder= new StringBuilder(512);
            stringBuilder.append("<a href=\"");
            stringBuilder.append(Utils.getAbsoluteUrl(EditBookingSourcePage.class, new PageParameters())+"");
            stringBuilder.append("\">Clicca Qui!</a>");

            feedbackErrorPanel.info(stringBuilder);

public static <C extends Page> String getAbsoluteUrl(final Class<C> pageClass, final PageParameters parameters) {

    CharSequence resetUrl = RequestCycle.get().urlFor(pageClass, parameters);
    String abs = RequestUtils.toAbsolutePath("/", resetUrl.toString());
    final Url url = Url.parse(abs);
    return RequestCycle.get().getUrlRenderer().renderFullUrl(url);
}

但不起作用。

3 个答案:

答案 0 :(得分:1)

您需要致电feedbackPanel.setEscapeModelStrings(false)。 如果没有这个,Wicket将逃避所有HTML字符以防止XSS攻击。

答案 1 :(得分:0)

正如@ martin-g首先提到的,你应该逃避html标签。 LD R0, VALUE1

正如你提到的那样。我相信网址构建问题。所以无论你在下面的步骤中做了什么。我试过以下解决方案,它对我有用。

feedbackPanel.setEscapeModelStrings(false)

在WicketApplication页面

     //since you are not passing any parameter we can send null
    String absoluteUrl = RequestCycle.get().getUrlRenderer().renderFullUrl(
                            Url.parse(urlFor(EditBookingSourcePage.class, null).toString())); 


StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append("<a href=");
                stringBuilder.append(absoluteUrl);
                stringBuilder.append("\">Clicca Qui!</a>");
          feedbackErrorPanel.info(stringBuilder);

答案 2 :(得分:0)

另一个应用是:

1,扩展org.apache.wicket.markup.html.panel.FeedbackPanel

2,扩展org.apache.wicket.feedback.FeedbackMessage并存储数据

3,使用自己的标记,模型对象

创建MyMessagePanel

4,覆盖扩展FeedbackPanel中的newMessageDisplayComponent方法

@Override
    protected Component newMessageDisplayComponent(String id, FeedbackMessage message) {
        //message with its own markup
        if (message.getClass().equals(MyMessage.class)) {
            MyMessage msg = (MyMessage) message;
            return new MyMessagePanel(id, Model.of(new MyMessagePanelModelObject(msg.getModelObject()))); //my message markup
        }

        return super.newMessageDisplayComponent(id, message); //other messages
    }