24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

【常州编程培训】struts标签库教程

2017-05-18 20:12:59 东方博宜 阅读

1、struts标签库简介
A、EL语句:获取参数
${requestScope.username}  获取request作用域的值
${username}   依次从pageContext、request、session、application来获取参数的值,但要注意,如

果小作用域有了,就不在向后获取

B、struts标签库:采用标签来替代页面上的java代码,简化页面的逻辑,方便程序员和美工之间合作!

标签库的使用步骤:
A、在页面引入struts标签库

<%@ taglib uri="/struts-tags" prefix="s"  %>



B、修改过滤器的过滤范围,要求过滤器过滤页面

    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>



常见错误:The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has
passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]

jsp的指令:page、taglib、include!

入门案例:
index.jsp

     <!-- 存储值,类似于定义变量 -->
     <!-- 类似于:int num = 99; -->
     <s:set name="num" value="99"></s:set>
     <!-- 类似于:out.print(num) -->
     num:<s:property value="#num"/>

u=121292328,3936656493&fm=23&gp=0.jpg

2、常见的struts标签
A、存取值
例子:

     <!-- 存储值,类似于定义变量 -->
     <!-- 类似于:session.setAttribute(); -->
     <s:set name="username" value="'管理员'" scope="session"></s:set>
     <s:set name="username" value="'admin'" scope="request"></s:set>
     
     
     <!-- 类似于: -->
            用户名:<s:property value="#session.username"/>
     <br />
            依次从小到大作用域来获取:<s:property value="#attr.username"/>
     <br />
            用户名长度:<s:property value="#session.username.length()"/>
     <br />
              调用替换方法:<s:property value="#session.username.replace('员','者')"/>

例子:获取参数的值,可以是url参数,也可以是表单参数

      类似于request.getParameterValues("");
    <!-- 获取参数,类似:String[] values = request.getParameterValues("role") -->
    <s:property value="#parameters.role"/>
    <br />
    <s:property value="#parameters.role[0]"/>
访问:http://127.0.0.1:8080/mystruts02/index.jsp?role=A&role=B

B、判断
   

 <s:set name="age" value="28" scope="request"></s:set>
    
    <!-- 判断 -->
    <s:if test="#request.age < 18">
                     未成年
    </s:if>
    <s:elseif test="#request.age <= 30">
                    少年
    </s:elseif>
    <s:elseif test="#request.age <= 46">
                   青年
    </s:elseif>
    <s:else>
                      中老年
    </s:else>




C、循环
Iterator
#status.even是否偶数行
#status.odd 是否奇数行
#status.count 当前行数
#status.index 当前行的序号,从0开始[#status.count=#status.index+1]
#status.first 是否第一行
#status.last 是否最后一行
#status.modules(int) 当前行数取模

例子:
index.jsp

 <a href="login.action">登陆获取参数</a>




UserAction:

public class UserAction extends CommonAction{
    
    /**
     * 处理登陆请求
     * @return
     */
    public String login(){
        List<java.lang.String> list = new ArrayList<String>();
        list.add("语文");
        list.add("数学");
        list.add("英语");
        list.add("物理");
        list.add("政治");
        
        this.session.setAttribute("kemu", list);
        
        return "success";
    }
}



CommonAction:

public class CommonAction implements 
ServletRequestAware,ServletResponseAware,ServletContextAware{
    public HttpServletRequest request;
    public HttpServletResponse response;
    public HttpSession session;
    public ServletContext application;
    
    //为request赋值以及获取session
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
        this.session = request.getSession();
    }
    
    //为response赋值
    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    
    //为application赋值
    public void setServletContext(ServletContext application) {
        this.application = application;
    }
}



main.jsp

     循环获取科目:
  <style type="text/css">
     .row_0{
         color:green;
     }
     
     .row_1{
         color:red;
     }
  </style>
  
     循环获取科目:
     <s:iterator value="#session.kemu" status="status">
        <p class="row_<s:property value="#status.index % 2"/>">
                         下标:<s:property value="#status.index"/>, <s:property/>
        </p>
     </s:iterator>



struts.xml

      <!-- 匹配登陆请求,name对应前端页面请求的名称 -->
      <!-- {1}代表第一颗星的值 ,代表要访问的方法,{2}代表第二颗星,代表要访问的页面名称-->
      <action name="*" class="com.user.action.UserAction" method="{1}">
         <result>/main.jsp</result>
      </action>

例子:遍历对象
UserAction:

public class UserAction extends CommonAction{
    
    /**
     * 处理登陆请求
     * @return
     */
    public String login(){
        List<User> list = new ArrayList<User>();
        list.add(new User(1,"张三","123"));
        list.add(new User(2,"张三","123"));
        list.add(new User(3,"张三","123"));
        list.add(new User(4,"张三","123"));
        list.add(new User(5,"张三","123"));
        
        this.session.setAttribute("users", list);
        
        return "success";
    }
}



main.jsp

  <style type="text/css">
     .row_0{
         color:green;
     }
     
     .row_1{
         color:red;
     }
  </style>
  
     循环获取科目:
     <s:iterator value="#session.users" status="status">
        <p class="row_<s:property value="#status.index % 2"/>">
                         编号:<s:property value="userno"/>
                         ,
                         姓名:<s:property value="username"/>
                         ,
                         密码:<s:property value="password"/>
        </p>
     </s:iterator>




D、方法调用
非静态方法:
UserService:

public class UserService {
    public static int getSum(int a,int b){
        return a + b;
    }
    
    public int getMax(int a,int b){
        return a > b ? a : b;
    }
    
}



main.jsp

      <!-- 生成对象,相当于UserService us = new UserService(); -->
      <s:bean name="com.user.service.UserService" id="us"></s:bean>
      
      <!-- 调用非静态方法 -->
      <s:property value="#us.getMax(100,101)"/>



静态方法:
main.jsp

                 调用静态方法:
      <s:property value="@com.user.service.UserService@getSum(100,101)"/>



注意:修改struts.xml的设置,允许静态方法的调用!
  <!-- 设置struts允许调用静态方法的常量 -->

  <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn