Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带链接的反馈面板_Java_Wicket - Fatal编程技术网

Java 带链接的反馈面板

Java 带链接的反馈面板,java,wicket,Java,Wicket,是否有任何解决方案可用于构建包含带有链接的内部消息的反馈面板?我试着用这个: StringBuilder stringBuilder= new StringBuilder(512); stringBuilder.append("<a href=\""); stringBuilder.append(Utils.getAbsoluteUrl(EditBookingSourcePage.class, new PagePara

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

            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);
}
StringBuilder StringBuilder=新的StringBuilder(512);
stringBuilder.append(“”);
反馈ErrorPanel.info(stringBuilder);
公共静态字符串getAbsoluteUrl(最终类pageClass,最终页参数){
CharSequence resetUrl=RequestCycle.get().urlFor(pageClass,参数);
字符串abs=RequestUtils.toabsolutionPath(“/”,resetUrl.toString());
最终Url=Url.parse(abs);
返回RequestCycle.get().getUrlRenderer().renderFullUrl(url);
}

但是不起作用。

您需要调用
反馈面板。setEscapeModelStrings(false)

没有这个Wicket将转义所有HTML字符以防止XSS攻击。

正如@martin-g首先提到的,您应该转义HTML标记<代码>反馈面板。setEscapeModelStrings(false)

正如你提到的那样。我相信这是个问题。所以,无论你在上面做了什么,试着在下面的步骤。我试过下面的解决方案,它对我有效

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

另一个方法是:

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

@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
    }
2、扩展org.apache.wicket.FeedbackMessage并存储数据

3、使用自己的标记、模型对象创建MyMessagePanel

4、覆盖扩展反馈面板中的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
    }

问题是urlFor()方法并不总是以相同的方式工作。我已将页面装载在路径“/设置/预订源”下,一次url用于返回正确路径,而另一次url用于返回错误路径(如“/预订源”),url与当前页面的url相对。如果当前页面为
/setting/something
,则相对页面为
/booking source
,请注意前导点!“不起作用”并不能解释什么是不起作用的。请提供更多信息,说明哪一部分不起作用。