Html 呈现Wicket组件

Html 呈现Wicket组件,html,rendering,wicket,Html,Rendering,Wicket,我有一个附在页面上的小门面板。我需要获取面板生成的呈现HTML代码。我需要与面板生成的HTML相同的HTML来输出发送到浏览器的HTML。我不知道整个页面的HTML是什么 我的面板是只读的,因此重新生成输出并不重要 private MyPanel MyPanel; 公共void oninitialize(){ super.onInitialize(); 添加(myPanel=newmypanel()); } 新的AjaxLink(){ 公共void onClick(AjaxRequestTarg

我有一个附在页面上的小门面板。我需要获取面板生成的呈现HTML代码。我需要与面板生成的HTML相同的HTML来输出发送到浏览器的HTML。我不知道整个页面的HTML是什么

我的面板是只读的,因此重新生成输出并不重要

private MyPanel MyPanel;
公共void oninitialize(){
super.onInitialize();
添加(myPanel=newmypanel());
}
新的AjaxLink(){
公共void onClick(AjaxRequestTarget目标){
字符串myPanelHtml=//以某种方式从myPanel获取html
//使用myPanelHtml做一些事情
}
}

如果我需要从不是面板的组件中呈现HTML,情况会有所不同吗?一个不提供标记的组件。

基于jordeu的回答和Wicket wiki,我做了这个。它不需要修改组件层次结构,但在我的例子中,面板已经是页面的一部分

然而,我有点担心更改应用程序设置和使用Wicket API的非公共部分

公共静态StringResponse GetRenderResponse(最终组件容器){
//将呈现的标记存储到不同的位置
最终响应originalResponse=RequestCycle.get().getResponse();
StringResponse StringResponse=新的StringResponse();
RequestCycle.get().setResponse(stringResponse);
//禁用“每个请求只能呈现一次组件”-选中
boolean originalComponentCheck=container.getApplication().getDebugSettings().getComponentUseCheck();
container.getApplication().getDebugSettings().setComponentUseCheck(false);
试一试{
//prepareForRender()不是公共Wicket API的一部分!!
container.prepareForRender();
container.render();
container.afterRender();
}最后{
//恢复请求周期和检查
container.getApplication().getDebugSettings().setComponentUseCheck(originalComponentCheck);
RequestCycle.get().setResponse(原始响应);
}
返回响应;
}
用法:

new AjaxLink(){
公共void onClick(AjaxRequestTarget目标){
StringResponse=GetRenderResponse(myPanel);
字符串myPanelHtml=response.toString();
//使用myPanelHtml做一些事情
}

基于jordeu的回答和Wicket wiki,我做了这个。它不需要修改组件层次结构,但在我的例子中,面板已经是页面的一部分了

然而,我有点担心更改应用程序设置和使用Wicket API的非公共部分

公共静态StringResponse GetRenderResponse(最终组件容器){
//将呈现的标记存储到不同的位置
最终响应originalResponse=RequestCycle.get().getResponse();
StringResponse StringResponse=新的StringResponse();
RequestCycle.get().setResponse(stringResponse);
//禁用“每个请求只能呈现一次组件”-选中
boolean originalComponentCheck=container.getApplication().getDebugSettings().getComponentUseCheck();
container.getApplication().getDebugSettings().setComponentUseCheck(false);
试一试{
//prepareForRender()不是公共Wicket API的一部分!!
container.prepareForRender();
container.render();
container.afterRender();
}最后{
//恢复请求周期和检查
container.getApplication().getDebugSettings().setComponentUseCheck(originalComponentCheck);
RequestCycle.get().setResponse(原始响应);
}
返回响应;
}
用法:

new AjaxLink(){
公共void onClick(AjaxRequestTarget目标){
StringResponse=GetRenderResponse(myPanel);
字符串myPanelHtml=response.toString();
//使用myPanelHtml做一些事情
}

来自Wicket 6.7.0,它可以轻松完成

ComponentRenderer.render(组件c)

从wicket页面:

将页面或组件呈现为字符串

用户列表中一直存在的一个问题是 能够将页面或组件呈现为字符串,以便使用 Wicket来呈现HTML电子邮件。现在您可以使用 ComponentRenderer不必求助于其他 不太明显的方法

ComponentRenderer公开了两种方法:renderComponent和renderPage 而且他们完全按照自己的名字做。快乐的电子邮件


虽然是用于邮寄,但您也可以将其用于其他目的,当然,Wicket 6.7.0中的

可以轻松完成

ComponentRenderer.render(组件c)

从wicket页面:

将页面或组件呈现为字符串

用户列表中一直存在的一个问题是 能够将页面或组件呈现为字符串,以便使用 Wicket来呈现HTML电子邮件。现在您可以使用 ComponentRenderer不必求助于其他 不太明显的方法

ComponentRenderer公开了两种方法:renderComponent和renderPage 而且他们完全按照自己的名字做。快乐的电子邮件

当然,虽然它是用于邮寄的,但您也可以将其用于其他目的