08-struts2使用通配符配置action

配置action的时候可以使用通配符。用星号*来表示任意的字符。

<struts>
    <constant name="struts.devMode" value="true"/>
    <package name="default" namespace="/"  extends="struts-default"> 
        <action name="*" class="cn.bamn.struts.HomeAction" method="{1}">  
            <result>
                /{1}.jsp
            </result>          
        </action>  
    </package> 
    <package name="admin" namespace="/admin"  extends="struts-default"> 
        <action name="*_*" class="cn.bamn.struts.{1}Action">  
            <result>
                /admin/{1}/{2}.jsp
            </result>
        </action>  
    </package>  
</struts>Code language: HTML, XML (xml)

每一个星号匹配到的内容。从左到右排序第一个就是用{1} 第二个用{2}

然后再后面的class method 以及result里面都可以使用。

然后我们修改两个action类

public class CategoryAction extends ActionSupport {
	
    public String index(){
        return SUCCESS;
    }
	
    public String add(){
        return SUCCESS;
    }
	
    public String del(){
        return SUCCESS;
    }
}

public class HomeAction extends ActionSupport {
	
    public String index(){
        return "success";
    }
}Code language: PHP (php)

然后把demo.jsp 改为index.jsp

但是当我们访问

http://p50:8080/Struct6Demo/admin/Category_add

报下面错误

Struts Problem Report
Struts has detected an unhandled exception: 
Messages:	1.	org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp) 
2.	java.lang.NoClassDefFoundError: org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp) 
File:	org/apache/jasper/servlet/JspServlet.java
Line number:	274
________________________________________
Stacktraces
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/jsp/admin/Category/add_jsp (wrong name: org/apache/jsp/admin/category/add_jsp) 
    org.apache.jasper.servlet.JspServlet.service(JspServletCode language: PHP (php)

我们发现再result里面的jsp文件 通配符只能用再文件名中 不能用在目录结果里面 因为中间隔了一个/

所以改为下面/admin/{1}_{2}.jsp

<package name="admin" namespace="/admin"  extends="struts-default"> 
    <action name="*_*" class="cn.bamn.struts.{1}Action" method="{2}">  
        <result>
            /admin/{1}_{2}.jsp
        </result>
    </action>  
</package>Code language: HTML, XML (xml)

当然如果需要jsp的目录路径也使用。我们需要给result标签页增加一个带通配符的name属性。

<package name="admin" namespace="/admin"  extends="struts-default"> 
    <action name="*_*" class="cn.bamn.struts.{1}Action" method="{2}">  
        <result name="{2}">
            /admin/{1}/{2}.jsp
        </result>
    </action>  
</package>Code language: HTML, XML (xml)

然后CategoryAction的各个action方法要调整。

public class CategoryAction extends ActionSupport {
	
    public String index(){
        return "index";
    }
	
    public String add(){
        return "add";
    }
	
    public String del(){
        return "del";
    }
}Code language: PHP (php)

然后我们访问

http://p50:8080/Struct7Demo/admin/Category_index

分类管理

http://p50:8080/Struct7Demo/admin/Category_add

分类增加

http://p50:8080/Struct7Demo/admin/Category_del

分类删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注