Struts2学习——1700Struts通用标签

背景

我们可以把Struts标签分为,通用标签,控制标签,UI标签等,以下几个小节就主要来讲Struts常用的一些标签,这些标签并不是全部的标签,只是一些比较常用的标签。

通用标签 ——property

本文是以结果导向分析的方式进行的。其实property标签,我们前面已经常用了。如果value=”xxx”的xxx部分没有特意指定,那么就默认是OGNL表达式,如果要输出的是字符串的吧,可以在xxx两边打单引号(不过…想直接输出字符串,直接打不就行了吗,为啥要用property标签……),具体例子如下所示:

首先先看index.jsp的页面及代码

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%
String contextPath = request.getContextPath();
 %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
    访问属性
    <a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>
</body>
</html>

代码很简单,就是一个个超链接,action的名称为tags,有两个参数,username和password,点击超链接就把这条URL传给服务器端。

分析struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name="struts.devMode" value="true" />

    <package name="tags" extends="struts-default">

        <action name="tags" class="com.bjsxt.struts2.tags.TagsAction">

            <result>/tags.jsp</result>

        </action>

    </package>
</struts>

可以看到TagsAction起作用,然后如果收到success就跳转到tags.jsp。

TagAction

package com.bjsxt.struts2.tags;

import com.opensymphony.xwork2.ActionSupport;

public class TagsAction extends ActionSupport {
    private String username;
    private String password;


    @Override
    public String execute() throws Exception {
        return SUCCESS;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }


}

Action中的内容非常简单,两个变量接收参数用。一个execute方法返回success。

tags.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>Struts Tag学习</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <ol>
        <li>
            property:<s:property value="username"/>
        </li>
        <li>
            property 取值为字符串:<s:property value="'username'"/>
        </li>
        <li>
            property 设定默认值:<s:property value="admin" default="管理员"/>
        </li>
        <li>
            property 设定HTML(默认为true表示转义):<s:property value="'<hr/>'" escape="false"/>
        </li>
    </ol>
  </body>
</html>

第一个<li>标签的内容就不解释了,经常在用,最简单的OGNL表达式。

第二个<li>标签就是开头提到的,如果property标签要输出的就是字符串怎么办,加单引号
第三个<li>标签值得是,如果值栈中有admin的value就用那个value输出到页面,如果没有就输出 管理员 三个字
第四个<li>标签指的是,如果property标签的value处输入的html标签,那么,struts是会默认把这个标签转义成普通字符串输出出来的,如果设定了

escape=”false

那么就不会转义,具体效果如下图所示:

这里写图片描述

可以到第四个标签处变成了分隔线,说明没有转义。

通用标签——set

这个标签的具体作用就是将一个变量设置到一个特定的域里面。在实际的开发中,其实用的并不多,因为如果仅仅是把jsp作为一个视图,或者是页面表示的话,一般不用设置一个什么变量的。所以在应用大多set标签用于,一个变量的名称太长了,如果下面一直要用到的话,打这么长的名字也是有点麻烦的,因此需要重新set一个短一点的名字。

这里写图片描述

接下来,看看实例。

tags.jsp

<li>
    set 设定AdminPassword值(不设scope存在Request和ActionContext):
            <s:set var="AdminPassword" value="password"></s:set>
</li>
<li>
    从request取值: 
    <s:property value="#request.AdminPassword"/>
</li>
<li>
   从ActionContext取值: 
    <s:property value="#AdminPassword"/>
</li>
<li>
    设定AdminName范围为session:
    <s:set var="AdminName" value="username" scope="session"></s:set>
</li>
<li>
    从session域取值:
    <s:property value="#session.AdminName"/>
 </li>
 <li>
   从ActionContext取值:
    <s:property value="#AdminName"/>
</li>
<hr/>

这里写图片描述

  • 从5.6.7代码及结果可得:

    如果set标签不设scope那么默认的scope就是存在ActionContext和request域中的。

  • 从8.9.10代码及结果可得:

    如果设置了特定的scope那么只能在特定域中能取出变量值,不会存在ActionContext中。

通用标签——bean

这个bean标签的作用就是初始化一个class,new一个相应的对象出来,然后将这个对象放在ActionContext里面。

这里写图片描述

通过实例,来看一下,首先定义一个新的class叫Cat

package com.bjsxt.struts2.tags;

public class Cat {
    private String name;

    public Cat() {
        super();
    }

    public Cat(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

tags.jsp(节选)

<li>
    new出一个Cat对象cat,命名为Garfield:
    <s:bean var="cat" name="com.bjsxt.struts2.tags.Cat">
            <s:param name="name" value="'Garfield'"></s:param>
    </s:bean>
</li>
<li>
    从ActionContext中取出Garfield:
    <s:property value="#cat.name"/>
</li>
<hr/>

第一个<li>标签中的内容表示,new出一个cat对象,对cat中的name变量进行赋值,赋值为Garfield。然后struts就会把这个car变量,以cat为变量名存在ActionContext里面。

第二个<li>标签就是表示,从ActionContext中取出cat这个对象的name变量。

效果如下图所示:

这里写图片描述

这就是本节的全部内容

若有不足之处,请不吝赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值