I think a very nice addition to this would be to allow the included JSP to have access to the current component model.

./alex
--
.w( the_mindstorm )p.

#: Robert McClay changed the world a bit at a time by saying on  11/14/2005 
9:27 AM :#
Here's a starting point if anyone wants to include a servlet / jsp in their page via RequestDispatcher.

public class IncludeServlet extends WebComponent {
  private static final long serialVersionUID = 1L;

  public IncludeServlet(String id) {
    super(id);
  }

  public IncludeServlet(String id, IModel model) {
    super(id, model);
  }

protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest(); HttpServletRequest request = servletWebRequest.getHttpServletRequest(); WebResponse webResponse = (WebResponse) getRequestCycle().getOriginalResponse(); HttpServletResponse response = webResponse.getHttpServletResponse(); RequestDispatcher dispatcher = ((ServletWebRequest) getRequest()).getHttpServletRequest().getRequestDispatcher(getModelObjectAsString()); GenericServletResponseWrapper wrappedResponse = new GenericServletResponseWrapper(response);

    try {
      dispatcher.include(request, wrappedResponse);
    } catch (ServletException e) {
      throw new RuntimeException(e);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
replaceComponentTagBody(markupStream, openTag, new String(wrappedResponse.getData()));
  }
}

class GenericServletOutputStream extends ServletOutputStream {
  private OutputStream out;

  public GenericServletOutputStream(OutputStream out) {
    this.out = out;
  }

  public void write(int b) throws IOException {
    out.write(b);
  }

  public void write(byte[] b) throws IOException {
    out.write(b);
  }

  public void write(byte[] b, int off, int len) throws IOException {
    out.write(b, off, len);
  }
}

class GenericServletResponseWrapper extends HttpServletResponseWrapper {
  private ByteArrayOutputStream output;

  public GenericServletResponseWrapper(HttpServletResponse response) {
    super(response);
    output = new ByteArrayOutputStream();
  }

  public byte[] getData() {
    return output.toByteArray();
  }

  public ServletOutputStream getOutputStream() {
    return new GenericServletOutputStream(output);
  }

  public PrintWriter getWriter() {
    return new PrintWriter(getOutputStream(), true);
  }
}

On 2005-11-06 16:27:44 -0700, Eelco Hillenius <[EMAIL PROTECTED]> said:

Ah, yes. True. It used to resolve local includes using
javax.servlet.RequestDispatcher, i which case including request
attributes would work. However, that proved to be quite problametic
and we changed it to always use the absolute requests.

What you need shouldn't be too hard however. But it is not something
Wicket supports out-of-the-box (and I'm not sure whether that would be
in Wicket's scope either).

You don't need Wicket to tell stopping any processing, as that is
already part of the idea of component orientation. What you need (to
build) is a component that gets the content you want to include during
it's rendering process. E.g. by letting your component extend from
WebComponent and overriding method onComponentTagBody to do the work.
In this method, you'll probably want to use the request processor:

RequestDispatcher dispatcher ((ServletWebRequest)getRequest()).getHttpServletRequest()
                                .getRequestDispatcher("*path-to-jsp*");

For the including.

Eelco




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user




-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc.  Get Certified Today
Register for a JBoss Training Course.  Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to