如何将wicket框架6.x与普通的旧jsp集成

时间:2013-09-25 06:36:52

标签: jsp wicket wicket-1.6

我正在寻找如何用jsp来控制wicket 6.10的例子 我们有很多用jsp编写的代码,这是一个很好的代码,我们希望它在我们的wicket 1.应用程序中包含那些jsp文件,我们如何集成它? 2.将jsp文件放在wicket面板中? 3.那些jsp文件应该在哪里?

我所做的是在网络标记内:

  @Override
public void onComponentTagBody(MarkupStream markupStream, ComponentTag tag) {

    // Set up mock response and dispatch.
    ServletContext context = WebApplication.get().getServletContext();
    ServletRequest request = (HttpServletRequest) RequestCycle.get().getRequest().getContainerRequest();
    MockResponse mockResponse = new MockResponse((HttpServletResponse) RequestCycle.get().getResponse().getContainerResponse());

    try {
        context.getRequestDispatcher("/" + pageName + ".jsp").include(request, mockResponse);
    } catch (ServletException | IOException e) {
        e.printStackTrace();
    }

    try {

        replaceComponentTagBody(markupStream, tag, mockResponse.getOutput());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

class MockResponse extends HttpServletResponseWrapper {
    ServletOutputStream servletStream;
    ByteArrayOutputStream byteStream;

    public MockResponse(HttpServletResponse response) {
        super(response);
        byteStream = new ByteArrayOutputStream();
        servletStream = new ServletOutputStream() {

            @Override
            public void write(int b) {
                byteStream.write(b);
            }
        };
    }

    @Override
    public ServletOutputStream getOutputStream() {
        return servletStream;
    }

    public String getOutput() throws UnsupportedEncodingException {
        return byteStream.toString("UTF-8"); 
    } 

}

html是由 myjsp html ... 然后thewicket psage 我想要的是我嘲笑的所有检票口都在我的组件内 我怎么能得到它?

2 个答案:

答案 0 :(得分:3)

新版本的wicketstuff minis项目支持将jsp文件集成到wicket页面中:

<dependency>
   <groupId>org.wicketstuff</groupId>
   <artifactId>wicketstuff-minis</artifactId>
   <version>6.17.0</version><!-- or 7.0.0-M3 -->
</dependency>

仅在Wicket-WebApplication中使用以下行:

getPageSettings().addComponentResolver(new WicketServletAndJSPResolver());

然后你可以像这样包含jsp:

<wicket:jsp file="/de/test/jspwicket/TestPage.jsp"/>

可以在相同版本的“wicketstuff-minis-example”-Projekt中找到文档。

亲切的问候

更新资讯(22.10.2014):

自Wicketstuff的新SNAPSHOT版本以来,jee集成已转移到另一个项目:

<dependency>
   <groupId>org.wicketstuff</groupId>
   <artifactId>wicketstuff-jee-web</artifactId>
   <version>6.18.0-SNAPSHOT</version>
   <!-- soon 6.18.0 --><!-- or 7.0.0-SNAPSHOT, soon 7.0.0 -->
</dependency>

班级名称略有改变:

getPageSettings().addComponentResolver(new JEEWebResolver());

还有许多新内容可供查看,例如表格提交支持el功能/标签。

文档已移至github上的项目Wiki页面(JEE Web Integration)。要启用SNAPSHOT-Repository,请参阅Wicketstuff文档。

更新资讯(15.02.2015):

http://java.dzone.com/articles/integrate-jspjsf-pages-wicket

亲切的问候

答案 1 :(得分:0)

要将JSP内容添加到Wicket页面,您可以使用Include

要在JSP页面中使用依赖于Wicket的基础结构(例如WebSessionWebApplication实例,或为Wicket页面生成URL),您可以使用WicketSessionFilter

我不知道是否非常建议在JSP页面中包含Wicket内容,但您可以尝试WicketTester,调用startPage()startComponentInPage(),然后获取生成的HTML与getLastResponseAsString()