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

Lukasz Lenart commented on WW-4161:
-----------------------------------

I have developed the following {{UnknownHandler}} and using it in one of my 
project (Struts + Convention), I can donate it to Struts Convention plugin, 
wdyt?
{code:java}
public class TilesUnknownHandler implements UnknownHandler {

    private static Logger LOG = LogManager.getLogger(TilesUnknownHandler.class);

    @Override
    public ActionConfig handleUnknownAction(String namespace, String 
actionName) throws XWorkException {
        return null;
    }

    @Override
    public Result handleUnknownResult(ActionContext actionContext, String 
actionName, ActionConfig actionConfig, String resultCode) throws XWorkException 
{

        ServletContext servletContext = 
ServletActionContext.getServletContext();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();

        TilesContainer container = TilesAccess.getContainer(servletContext);

        String namespace = 
ServletActionContext.getActionMapping().getNamespace();
        Set<String> definitions = buildDefinitionNames(namespace, actionName, 
resultCode);

        for (String definition : definitions) {
            LOG.debug("Looking for tiles definition: {}", definition);

            if (container.isValidDefinition(definition, request, response)) {
                return new TilesResult(definition);
            }
        }

        LOG.warn("Couldn't find tiles definition for namespace {}, action name 
{} and result code {}", namespace, actionName, resultCode);
        return null;
    }

    protected Set<String> buildDefinitionNames(String namespace, String 
actionName, String resultCode) {
        Set<String> definitions = new LinkedHashSet<>();

        if (namespace.startsWith("/")) {
            namespace = namespace.substring(1);
        }

        if (!Objects.equals(namespace, "") && !Objects.equals(namespace, "/")){
            if (namespace.endsWith("/")) {
                definitions.add(namespace + actionName);
                definitions.add(namespace + actionName + "-" + resultCode);
                definitions.add(namespace + resultCode);
            } else {
                definitions.add(namespace + "/" + actionName);
                definitions.add(namespace + "/" + actionName + "-" + 
resultCode);
                definitions.add(namespace + "/" + resultCode);
            }
        }

        definitions.add(actionName);
        definitions.add(actionName + "-" + resultCode);

        LOG.debug("Possible definition's names {}", definitions);

        return definitions;
    }

    @Override
    public Object handleUnknownActionMethod(Object action, String methodName) {
        return null;
    }
}
{code}

> Incorporate tiles3 into conventions, tutorial (and add code to tiles3 plugin)
> -----------------------------------------------------------------------------
>
>                 Key: WW-4161
>                 URL: https://issues.apache.org/jira/browse/WW-4161
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Plugin - Tiles
>            Reporter: Ken McWilliams
>             Fix For: 2.5
>
>         Attachments: struts2-tiles-annotations.patch, 
> struts2-tiles-annotations.patch
>
>
> There is a description found here: 
> http://stackoverflow.com/questions/11161194/freemarker-and-struts2-tags
> It would be good if the struts2 website could turn the following into a 
> tutorial, possibly some of the code could be included into the tile3 plugin 
> but I'm not convinced at this time that should be done. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to