[ https://issues.apache.org/struts/browse/WW-1866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43871#action_43871 ]
lukasz03 edited comment on WW-1866 at 5/17/08 3:05 AM: ------------------------------------------------------------ Hi, I added simple implementation for that, you can use @Action annotation at class level and the same annotation at method level, patch below. You can use it like that: @Action(name = "index") // execute() will be called @Results ({ @Result(name = EmployeeAction.LIST, value = "/jsp/employees/list.jsp") }) public class EmployeeAction extends ActionSupport { protected static final String LIST = "list"; private EmployeeService employeeService; private Collection<Employee> employees; public String execute { employees = employeeService.findAll(); return LIST; } @Action(name = "list") public String doList() { employees = employeeService.findAll(); return LIST; } } ******************************** patch *************************************** Index: src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java =================================================================== --- src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java (revision 657312) +++ src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java Sat May 17 11:37:44 CEST 2008 @@ -21,33 +21,30 @@ package org.apache.struts2.config; -import java.lang.annotation.Annotation; -import java.lang.reflect.Modifier; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; - -import javax.servlet.ServletContext; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.config.ConfigurationProvider; import com.opensymphony.xwork2.config.PackageProvider; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.config.entities.ResultTypeConfig; -import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.ClassLoaderUtil; import com.opensymphony.xwork2.util.ResolverUtil; -import com.opensymphony.xwork2.util.TextUtils; import com.opensymphony.xwork2.util.ResolverUtil.ClassTest; -import com.opensymphony.xwork2.util.location.LocatableProperties; +import com.opensymphony.xwork2.util.TextUtils; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import javax.servlet.ServletContext; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; + /** * ClasspathPackageProvider loads the configuration * by scanning the classpath or selected packages for Action classes. @@ -365,7 +362,18 @@ .addResultConfigs(new ResultMap<String,ResultConfig>(cls, actionName, defaultResultType)) .build(); pkgConfig.addActionConfig(actionName, actionConfig); + for (Method m : cls.getMethods()) { + if (m.isAnnotationPresent(org.apache.struts2.config.Action.class)) { + org.apache.struts2.config.Action methodAnn = m.getAnnotation(org.apache.struts2.config.Action.class); + actionName = methodAnn.name(); + ActionConfig.Builder builder = new ActionConfig.Builder(actionPackage, actionName, cls.getName()) + .addResultConfigs(new ResultMap<String,ResultConfig>(cls, actionName, defaultResultType)); + builder.methodName(m.getName()); + actionConfig = builder.build(); + pkgConfig.addActionConfig(actionName, actionConfig); - } + } + } + } /** * Finds or creates the package configuration for an Action class. was (Author: lukasz03): Hi, I add simple implementation for that, you can use @Action annotation at class level and the same annotation at method level, patch below. You can simple use it like that: @Action(name = "index") // execute() will be called @Results ({ @Result(name = EmployeeAction.LIST, value = "/jsp/employees/list.jsp") }) public class EmployeeAction extends ActionSupport { protected static final String LIST = "list"; private EmployeeService employeeService; private Collection<Employee> employees; public String execute { employees = employeeService.findAll(); return LIST; } @Action(name = "list") public String doList() { employees = employeeService.findAll(); return LIST; } } ******************************** patch *************************************** Index: src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java =================================================================== --- src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java (revision 657312) +++ src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java Sat May 17 11:37:44 CEST 2008 @@ -21,33 +21,30 @@ package org.apache.struts2.config; -import java.lang.annotation.Annotation; -import java.lang.reflect.Modifier; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.*; - -import javax.servlet.ServletContext; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationException; -import com.opensymphony.xwork2.config.ConfigurationProvider; import com.opensymphony.xwork2.config.PackageProvider; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.config.entities.ResultTypeConfig; -import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.ClassLoaderUtil; import com.opensymphony.xwork2.util.ResolverUtil; -import com.opensymphony.xwork2.util.TextUtils; import com.opensymphony.xwork2.util.ResolverUtil.ClassTest; -import com.opensymphony.xwork2.util.location.LocatableProperties; +import com.opensymphony.xwork2.util.TextUtils; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import javax.servlet.ServletContext; +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; + /** * ClasspathPackageProvider loads the configuration * by scanning the classpath or selected packages for Action classes. @@ -365,7 +362,18 @@ .addResultConfigs(new ResultMap<String,ResultConfig>(cls, actionName, defaultResultType)) .build(); pkgConfig.addActionConfig(actionName, actionConfig); + for (Method m : cls.getMethods()) { + if (m.isAnnotationPresent(org.apache.struts2.config.Action.class)) { + org.apache.struts2.config.Action methodAnn = m.getAnnotation(org.apache.struts2.config.Action.class); + actionName = methodAnn.name(); + ActionConfig.Builder builder = new ActionConfig.Builder(actionPackage, actionName, cls.getName()) + .addResultConfigs(new ResultMap<String,ResultConfig>(cls, actionName, defaultResultType)); + builder.methodName(m.getName()); + actionConfig = builder.build(); + pkgConfig.addActionConfig(actionName, actionConfig); - } + } + } + } /** * Finds or creates the package configuration for an Action class. > Add annotation support for Action Method > ---------------------------------------- > > Key: WW-1866 > URL: https://issues.apache.org/struts/browse/WW-1866 > Project: Struts 2 > Issue Type: Improvement > Components: Plugin - CodeBehind > Affects Versions: 2.0.6 > Reporter: Anderson M. C. de Souza > Fix For: Future > > > Annotation support for action methods would be a very nice feature to have. I > know it's not a basic configuration cenario, but I think it would help a lot > "use case" based applications, which many times use one class per use case to > handle actions. > Thanks, > Anderson Souza -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.