JSP目录结构
Action类
注:Action是通过http://blog.youkuaiyun.com/blackbeauty1024/article/details/43965139文章中第三中方式创建的,buildResultCode应该放在BaseAction中,这里放在UserAction中只是方便大家阅读
import com.action.base.BaseAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionProxy;
public class UserAction extends BaseAction {
private static final long serialVersionUID = 8502420792396150103L;
public String list()throws Exception{
return buildResultCode();
}
public String index()throws Exception{
return buildResultCode();
}
public String detail()throws Exception{
return buildResultCode();
}
public String buildResultCode(){
ActionProxy actionProxy = ActionContext.getContext().getActionInvocation().getProxy();
return actionProxy.getActionName()+"-"+actionProxy.getMethod();
}
}
ResultMapBuilder
public class ResultMapBuilder extends DefaultResultMapBuilder {
private ConventionsService conventionsService;
@Inject
public ResultMapBuilder(ServletContext servletContext, Container container,
@Inject("struts.convention.relative.result.types") String relativeResultTypes) {
super(servletContext, container, relativeResultTypes);
this.conventionsService=container.getInstance(ConventionsService.class, container.getInstance(String.class, ConventionConstants.CONVENTION_CONVENTIONS_SERVICE));
}
@Override
public Map<String, ResultConfig> build(Class<?> actionClass,
Action annotation, String actionName, PackageConfig packageConfig) {
final String namespace = packageConfig.getNamespace();
Map<String, ResultConfig> resultConfigMap = null;
if("".equals(namespace)){
resultConfigMap = new HashMap<String, ResultConfig>();
}else{
resultConfigMap = super.build(actionClass, annotation, actionName, packageConfig);
}
String defaultResultPath = conventionsService.determineResultPath(actionClass);
if (!defaultResultPath.endsWith("/")) {
defaultResultPath = defaultResultPath + "/";
}
if (namespace != null && namespace.startsWith("/")) {
defaultResultPath = defaultResultPath + namespace.substring(1);
} else if (namespace != null) {
defaultResultPath = defaultResultPath + namespace;
}
// Add that ending slash for concatenation
if (!defaultResultPath.endsWith("/")) {
defaultResultPath += "/";
}
String resultPrefix = defaultResultPath + actionName;<pre name="code" class="java"><span style="white-space:pre"> </span>defaultResultPath=resultPrefix+"/";
Map<String, ResultConfig> results = new HashMap<String, ResultConfig>(); Map<String, ResultTypeConfig> resultsByExtension = conventionsService.getResultTypesByExtension(packageConfig); createFromResources(actionClass, results, defaultResultPath, resultPrefix, actionName, packageConfig, resultsByExtension);//扫描webapp\WEB-INF\content\user目录下的jsp创建ResultConfig resultConfigMap.putAll(results);return resultConfigMap;}}
配置ResultMapBuilder
<bean type="org.apache.struts2.convention.ResultMapBuilder" name="resultMapBuilder" class="com.test.support.struts2.ResultMapBuilder"/>
<constant name="struts.convention.resultMapBuilder" value="resultMapBuilder"/>
访问http://localhost:8080/projectName/user!list.do可以访问user-list.jsp页面