I came up with a StaticFilter (from http://issues.appfuse.org/browse/APF-431)
that seems to work (see code below). However, it causes another issue for
me. In my SiteMesh decorator, I'm including a messages.jsp that has calls to
the valueStack:
<%-- ActionError Messages - usually set in Actions --%>
<s:if test="hasActionErrors()">
<div class="error" id="errorMessages">
<s:iterator value="actionErrors">
<c:url value= "
alt="<fmt:message key="icon.warning"/>" class="icon" />
<s:property escape="false"/><br />
</s:iterator>
</div>
</s:if>
<%-- FieldError Messages - usually set by validation rules --%>
<s:if test="hasFieldErrors()">
<div class="error" id="errorMessages">
<s:iterator value="fieldErrors">
<s:iterator value="value">
<c:url value= "
alt="<fmt:message key="icon.warning"/>" class="icon" />
<s:property escape="false"/><br />
</s:iterator>
</s:iterator>
</div>
</s:if>
When I return a static page, this JSP causes issue:
java.lang.NullPointerException
at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:58)
This works fine when I request a Struts Action. Is there any way to check
for the stack in my messages.jsp?
Thanks,
Matt
<code>
public class StaticFilter extends OncePerRequestFilter {
private final static String DEFAULT_INCLUDES = "*.html";
private final static String DEFAULT_EXCLUDES = "";
private String[] excludes;
private String[] includes;
public static final String INCLUDES_PARAMETER = "includes";
public static final String EXCLUDES_PARAMETER = "excludes";
/**
* Read the includes/excludes paramters and set the filter accordingly.
*/
public void initFilterBean() {
String includesParam =
getFilterConfig().getInitParameter(INCLUDES_PARAMETER);
if (StringUtils.isEmpty(includesParam)) {
includes = parsePatterns(DEFAULT_INCLUDES);
} else {
includes = parsePatterns(includesParam);
}
String excludesParam =
getFilterConfig().getInitParameter(EXCLUDES_PARAMETER);
if (StringUtils.isEmpty(excludesParam)) {
excludes = parsePatterns(DEFAULT_EXCLUDES);
} else {
excludes = parsePatterns(excludesParam);
}
}
private String[] parsePatterns(String delimitedPatterns) {
//make sure no patterns are repeated.
Set patternSet =
org.springframework.util.StringUtils.commaDelimitedListToSet(delimitedPatterns);
String[] patterns = new String[patternSet.size()];
int i = 0;
for (Iterator iterator = patternSet.iterator(); iterator.hasNext();
i++) {
//no trailing/leading white space.
String pattern = (String) iterator.next();
patterns[i] = pattern.trim();
}
return patterns;
}
public void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws IOException,
ServletException {
UrlPathHelper urlPathHelper = new UrlPathHelper();
String path = urlPathHelper.getPathWithinApplication(request);
boolean pathExcluded = PatternMatchUtils.simpleMatch(excludes,
path);
boolean pathIncluded = PatternMatchUtils.simpleMatch(includes,
path);
if (pathIncluded && !pathExcluded) {
RequestDispatcher rd =
getServletContext().getRequestDispatcher(path);
rd.forward(request, response);
}
chain.doFilter(request, response);
}
}
</code>
Stuart Piltch wrote:
>
> mraible <matt <at> raibledesigns.com> writes:
>> I'm using *.html as my default extension, which causes a whole host of
>> issues
>> with Dojo. Regardless, I want to fight through it and see if I can come
>> up
>> with a solution.
>
> Hi Matt,
>
> I'm not sure about your specific FilterDispatcher question, but we also
> use
> *.html as a default extension. We ended up copying all the dojo html files
> that
> we use into out own /WEB-INF/widgets directory and adding an extra
> struts-dojo.xml file to our config:
>
> <!DOCTYPE struts PUBLIC
> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
> "http://struts.apache.org/dtds/struts-2.0.dtd">
>
> <struts>
> <package name="dojo" namespace="/struts/dojo/src/widget/templates"
> extends="base">
> <action name="*">
> <result type="plainhtml">/WEB-INF/widgets/{1}.html</result>
> </action>
> </package>
> <package name="dojoEditor2"
> namespace="/struts/dojo/src/widget/templates/Editor2" extends="base">
> <action name="*">
> <result
> type="plainhtml">/WEB-INF/widgets/Editor2/{1}.html</result>
> </action>
> </package>
> <package name="dojoEditor2Dialog"
> namespace="/struts/dojo/src/widget/templates/Editor2/Dialog"
> extends="base">
> <action name="*">
> <result
> type="plainhtml">/WEB-INF/widgets/Editor2/Dialog/{1}.html</result>
> </action>
> </package>
> </struts>
>
> It seems convoluted, but it's working. The other dojo files (css, js, etc)
> are
> working fine from within the struts jar.
>
> Cheers,
>
> - stuart
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
--
View this message in context:
http://www.nabble.com/Is-it-possible-to-get-Struts%27-FilterDispatcher-to-serve-up-static-files-tf3304172.html#a9196270
Sent from the Struts - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]