Skip to content

Commit

Permalink
#3 be more flexible for various extensions of the actual template fil…
Browse files Browse the repository at this point in the history
…e, don't use jsp dispatcher only
  • Loading branch information
dasniko committed Apr 18, 2016
1 parent a7edc4e commit d6250f4
Showing 1 changed file with 40 additions and 22 deletions.
62 changes: 40 additions & 22 deletions src/main/java/dasniko/ozark/react/ReactViewEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -84,37 +86,53 @@ private Map<String, String> parseQueryString(final String query) {
}

private void processRequest(final ViewEngineContext context, final Models models, final String view) throws ServletException, IOException {
RequestDispatcher requestDispatcher = servletContext.getNamedDispatcher("jsp");
// Need new request with updated URI and extension matching semantics
final HttpServletRequest request = new HttpServletRequestWrapper(context.getRequest()) {
@Override
public String getRequestURI() {
return resolveView(context, view);
}

@Override
public String getServletPath() {
return resolveView(context, view);
}
RequestDispatcher requestDispatcher = null;
HttpServletRequest request = context.getRequest();

@Override
public String getPathInfo() {
return null;
}
for (String name : models) {
request.setAttribute(name, models.get(name));
}

@Override
public StringBuffer getRequestURL() {
return new StringBuffer(getRequestURI());
final String viewExtension = getViewExtension(view);
for (Map.Entry<String, ? extends ServletRegistration> e : servletContext.getServletRegistrations().entrySet()) {
final Collection<String> mappings = e.getValue().getMappings();
if (mappings.contains(viewExtension)) {
requestDispatcher = servletContext.getNamedDispatcher(e.getKey());
request = new HttpServletRequestWrapper(context.getRequest()) {
@Override
public String getRequestURI() {
return resolveView(context, view);
}

@Override
public String getServletPath() {
return getRequestURI();
}

@Override
public String getPathInfo() {
return null;
}

@Override
public StringBuffer getRequestURL() {
return new StringBuffer(getRequestURI());
}
};
}
};
}

for (String name : models) {
request.setAttribute(name, models.get(name));
if (requestDispatcher == null) {
requestDispatcher = servletContext.getRequestDispatcher(resolveView(context, view));
}

requestDispatcher.forward(request, context.getResponse());
}

private String getViewExtension(final String view) {
return "*" + view.substring(view.lastIndexOf("."));
}

private String resolveView(final ViewEngineContext context, final String view) {
if (!view.startsWith("/")) {
String viewFolder = (String) context.getConfiguration().getProperty(VIEW_FOLDER);
Expand Down

0 comments on commit d6250f4

Please sign in to comment.