You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Philipp Leusmann (JIRA)" <ji...@apache.org> on 2010/02/18 18:10:27 UTC

[jira] Issue Comment Edited: (WW-3381) Suport for decorating static content

    [ https://issues.apache.org/jira/browse/WW-3381?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12829064#action_12829064 ] 

Philipp Leusmann edited comment on WW-3381 at 2/18/10 5:09 PM:
---------------------------------------------------------------

Possible solution:

Change org.apache.struts2.dispatcher.mapper.DefaultActionMapper.dropExtension(String, ActionMapping) to:

protected String dropExtension(String name, ActionMapping mapping) {
		if (extensions == null) {
			return name;
		}
		for (String ext : extensions) {
			if ("".equals(ext)) {
				return name;
			} else {
				String extension = "." + ext;
				if (name.endsWith(extension)) {
					name = name
							.substring(0, name.length() - extension.length());
					mapping.setExtension(ext);
					return name;
				}
			}
		}
		return null;
	}


Thus, if the empty extension is enabled, it accepts any URL, Which I think is what the user expects. If enabling the empty action by default is another story. I do not recomment it.

But IF the empty extension is enabled, it should be mapped as described in the original description of this issue. 
Or maybe by some addition parameters in struts.properties.

An idea for struts.properties would be adding something like:

struts.action.emptyExtension.enabled=true
struts.action.emptyExtension.mapping=/decorated_html/*,some_other_regExp


The result will, in my case, be a sitemesh-decorated html page when accession  the url /decorated_html/foo.html


      was (Author: p.leusmann):
    Possible solution:

Change com.byteshift.vobaclub.struts.VBClubActionMapper.dropExtension(String, ActionMapping) to:

protected String dropExtension(String name, ActionMapping mapping) {
		if (extensions == null) {
			return name;
		}
		for (String ext : extensions) {
			if ("".equals(ext)) {
				return name;
			} else {
				String extension = "." + ext;
				if (name.endsWith(extension)) {
					name = name
							.substring(0, name.length() - extension.length());
					mapping.setExtension(ext);
					return name;
				}
			}
		}
		return null;
	}


Thus, if the empty extension is enabled, it accepts any URL, Which I think is what the user expects. If enabling the empty action by default is another story. I do not recomment it.

But IF the empty extension is enabled, it should be mapped as described in the original description of this issue. 
Or maybe by some addition parameters in struts.properties.

An idea for struts.properties would be adding something like:

struts.action.emptyExtension.enabled=true
struts.action.emptyExtension.mapping=/decorated_html/*,some_other_regExp


The result will, in my case, be a sitemesh-decorated html page when accession  the url /decorated_html/foo.html

  
> Suport for decorating static content
> ------------------------------------
>
>                 Key: WW-3381
>                 URL: https://issues.apache.org/jira/browse/WW-3381
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Plugin - SiteMesh
>    Affects Versions: 2.1.8
>            Reporter: Philipp Leusmann
>            Priority: Critical
>   Original Estimate: 8h
>  Remaining Estimate: 8h
>
> In my case this issue is occuring when trying to decorate static content with sitemesh, but it generally is more an struts-core ActionMapper issue. 
> I was trying to decorate plain html files using the sitemesh-plugin.
> I expected it to work using the empty-string action mapper, and thus added a link to /decorated_html/foo.html . The reslut was an error page since all the variables in the template could not be resolved, due to a missing action.
> If org.apache.struts2.dispatcher.mapper.DefaultActionMapper.dropExtension(String, ActionMapping) would not return null for any url containing a dot but no slash and no supported action-extension after it, it would have worked.
> By looking at the tests, I found that the returned null was expected behaviour introduced for WW-2163.
> I think to resolve this issue it would have been better to promote more sofisticated filter mappings in the web.xml to avoid the empty action side effects described in a previous comment.
> In my case it would be sufficient to use filter mappings
> <filter-mapping>
> <filter-name>struts2-prepare</filter-name>
> <url-pattern>*.action</url-pattern>
> </filter-mapping>
> <filter-mapping>
> <filter-name>struts2-prepare</filter-name>
> <url-pattern>decorated_html/*</url-pattern>
> </filter-mapping>
> <filter-mapping>
> <filter-name>sitemesh-struts</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
> <filter-mapping>
> <filter-name>struts2-execute</filter-name>
> <url-pattern>*.action</url-pattern>
> </filter-mapping>
> <filter-mapping>
> <filter-name>struts2-execute</filter-name>
> <url-pattern>/decorated_html/*</url-pattern>
> </filter-mapping>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.