link 的反馈面板
FeedbackPanel with link
是否有任何解决方案可以构建包含 Link 内部消息的反馈面板?我尝试使用这个:
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);
}
但不起作用。
您需要致电 feedbackPanel.setEscapeModelStrings(false)
。
没有这个 Wicket 将转义所有 HTML 个字符以防止 XSS 攻击。
正如@martin-g 首先提到的,您应该转义 html 标签。 feedbackPanel.setEscapeModelStrings(false)
正如你所说,你做到了。我相信 url 构建问题。因此,无论您在此基础上做了什么,请尝试下面的步骤。我尝试了以下对我有用的解决方案。
//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);
在 WicketApplication 页面中
mountPage("setting/booking-source", EditBookingSourcePage.class);
另一种方法是:
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
}
是否有任何解决方案可以构建包含 Link 内部消息的反馈面板?我尝试使用这个:
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);
}
但不起作用。
您需要致电 feedbackPanel.setEscapeModelStrings(false)
。
没有这个 Wicket 将转义所有 HTML 个字符以防止 XSS 攻击。
正如@martin-g 首先提到的,您应该转义 html 标签。 feedbackPanel.setEscapeModelStrings(false)
正如你所说,你做到了。我相信 url 构建问题。因此,无论您在此基础上做了什么,请尝试下面的步骤。我尝试了以下对我有用的解决方案。
//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);
在 WicketApplication 页面中
mountPage("setting/booking-source", EditBookingSourcePage.class);
另一种方法是:
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
}