Struts学习----Struts2标签

73 篇文章 0 订阅
52 篇文章 0 订阅

              打开struts-2.3.7\docs\WW\tag-reference.html可以看到Struts2提供的所有标签。其中分为“通用标签”和“UI标签”两大部分。

Struts2通用标签之数据标签

              1.<s:property>(重要)

  • <s:property>标签用来执行OGNL表达式,最为常用的方式是使用它在页面中输出ValueStack或ActionContext中的数据。
  • <s:property value=”#request.hello”/>,等于ActionContext.getContext().getRequest().get(“hello”)。

 

 

名称

必需

默认值

类型

说明

default

String

表示默认值。当结果为null时,输出默认值。

escape

true

boolean

表示是否进行转义。该值为true时,当结果中包含<、>、”、’、&时,对其进行转义。

value

栈顶对象

Object

Ognl表达式

              2.<s:set>

  • <s:set>标签用来创建一个变量,保存到指定的范围内。
  • <s:set var=”myVar” value=”#parameters.score[0]” scope=”page”/>,创建一个变量,保存到page范围,key为myVar,值为“#parameters.score[0]”的运算结果。

名称

必需

默认值

类型

说明

var

String

变量的域名字,默认不是Ognl表达式

value

栈顶对象

Object

Ognl表达式。

scope

Action

String

变量的范围。可选值为:application、session、request、page、action

         scope的可选值中的action是我们陌生的范围,它是scope的默认值。它表示保存到request和OgnlContext两个范围中。即比request范围多出了一个OgnlContext范围。

<s:set var=”myVar” value=”#parameters.score[0]” />
<s:property value=”#myVar”/>等同于ActionContext.getContext().get(“myVar”);
<s:property value=”#request.myVar”/>等同ActionContext.getContext.getReuqest().get(“myVar”);

           3.<s:push>

  • <s:push>标签是把指定值暂时压入到值栈中,当执行完<s:push>标签后,压入到值栈中的值会被弹出。
  • <s:push value=”’hello’”/>等于把hello字符串压入到值栈中后,马上又弹出了,相当于什么都没做。
  • <s:push value=”#session.user”>把user压入到值栈中
  • <s:property value=”username”/>打印值栈元素的username属性
  • <s:property value=”password”/>打印值栈元素的password属性
  • </s:push>把user从值栈中弹出          4.<s:url>
  • <s:url>标签通常用来生成action路径,它与<c:url>标签很相似。
  • <s:url action=”TestAction”/>在页面中打印/contextpath/TestAction.action。也就是说它与<c:url>一样会生成全路径。而且无论给出后缀“.action”!action属性的值只需要与struts.xml文件中<action>元素的name属性值相同即可。
  • <s:url action=”TestAction” namspace=”/” />还可以指定名称空间
  • <s:url action=”TestAction”>
  • <s:param name=”name” value=”’张三’”/>
  • </s:url>页面中打印为:/ognl/TestAction.action?name=%E5%BC%A0%E4%B8%89还可以为URL指定参数,其中参数包含中文时自动使用URL编码。
    其中<s:param>是用来作为子标签的,它的作用是指定参数。它的value属性值为Ognl表达式,所以我们需要把“张三”用单引号引起来,表示Ognl表达式的字符串常量。

名称

必需

默认值

类型

说明

action

String

指定用于生成URL的action。

value

String

指定用于生成URL的地址值。通常只使用action或value其中一个属性。

var

String

如果指定了该属性,那么生成的URL不会输出到页面中,而是被保存到OgnlContext中。

method

String

指定调用action中的方法。如果使用的是value属性,那么该属性无效。

namespace

String

指定action所属的名称空间。

forceAddSchemeHostAndPort

false

Boolean

当该属性为true时,生成的URL为绝对路径,而且会包含主机名及端口号。

       5.<s:a>:它用来生成超链接,与<s:url>相似!

  • <s:a action=”TestAction” namespace=”/”>添加用户
  • <s:param name=”name” value=”’张三’”/>
  • </s:a>

      6.<s:debug>:Debug标签用于调试,它在页面中生成一个“[Debug]”超链接,单击这个超链接,可以查看ValueStack和ActionContext中保存的所有对象。

Struts2通用标签之控制标签

                 控制标签很好理解,就是流程控制了。例如if、elseif等,以及iterator等。

         1.<s:if>、<s:elseif>、<s:else>

<!—
在浏览器中输入:http://localhost:8080/tagtest/index.jsp?score=85
-->
<s:setname="score"value="#parameters.score[0]"/>
<s:propertyvalue="#score"/>:
<s:iftest="#score > 100 || #score < 0">
    <s:propertyvalue="'输入错误'"/>
</s:if>
<s:elseiftest="#score >= 90">
    <s:propertyvalue="'A'"/>
</s:elseif>
<s:elseiftest="#score >= 80">
    <s:propertyvalue="'B'"/>
</s:elseif>
<s:elseiftest="#score >= 70">
    <s:propertyvalue="'C'"/>
</s:elseif>
<s:elseiftest="#score >= 60">
    <s:propertyvalue="'D'"/>
</s:elseif>
<s:else>
    <s:propertyvalue="'E'"/>
</s:else>

          2.<s:iterator>:<s:iterator>标签可以用来迭代一个集合,可以迭代的集合有:Collection、Map、Enumeration、Iterator或者是数组。iterator标签在迭代过程中,会把当前对象暂时压入值栈,这样在子标签中就可以直接访问当前对象的属性(因为当前对象在栈顶),在标签体执行完毕后,位于栈顶的对象就会被删除,在循环的第二圈时,把新的当前对象再压入值栈中。

<s:iteratorvalue="{'zhangSan','liSi','wangWu' }">
    name: <s:property/><br/>
</s:iterator>

              如果为<s:iterator>标签指定了var属性,那么当前对象不只是压入到了值栈中,而且还会被添加到OgnlContext中。

<s:iteratorvalue="{'zhangSan','liSi','wangWu' }"var="name">
    name: <s:propertyvalue="#name"/><br/>
</s:iterator>

名称

必需

默认值

类型

说明

var

String

如果指定了该属性,那么迭代的集合中的元素将被保存到OgnlContext中,可以通过该属性的值来引用集合中的元素。该属性几乎不被使用。

value

Coolection、Map、Enumeration、Iterator 或数组

指定迭代的集合。如果没有指定该属性,那么iterator标签将把位于值栈栈顶的对象放入一个新创建的List中进行迭代。

status

String

如果指定了该属性,一个IteratorStatus实例将被放入到OgnlContext中,通过该实例可以获取迭代过程中的一些状态信息。

IteratorStatus类在org.apahce.struts2.views.jsp包下。下面是对该类常用方法的介绍:

  1. public int getCount():得到当前已经迭代的元素的总数。
  2. public int getIndex():得到当前迭代的元素的索引。
  3. public boolean isEven():判断当前迭代的元素的个数是否是偶数。
  4. public boolean isOdd():判断当前迭代的元素的个数是否是奇数。
  5. public boolean isFirst():判断当前迭代的元素是否是第一个元素。
  6. public boolean isLast():判断当前迭代的元素是否是最后一个元素。

在OGNL表达式中使用IteratorStatus类的方法时,可以直接使用:count、index、even、odd、first、last属性。

<s:iteratorvalue='{"one", "two", "three"}'status="status">
    <s:propertyvalue="#status.count"/>,
    <s:propertyvalue="#status.index"/>,
    <s:propertyvalue="#status.even"/>,
    <s:propertyvalue="#status.odd"/>,
    <s:propertyvalue="#status.first"/>,
    <s:propertyvalue="#status.last"/><br/>
</s:iterator>
<hr/>
<s:iteratorvalue="#{'1':'one','2':'two','3':'three','4':'four'}" status="st">
<s:propertyvalue="key"/>:<s:propertyvalue="value"/><br/>
</s:iterator>

  Struts2的表单标签还是比较好用的,但它也存在一些败笔,例如主题这一部分就不是很灵活。所以导致开发中没有公司会使用它提供的主题。

Struts2标签UI标签之表单标签

       Struts2标签的优势:

  • 简化代码;
  • 自动数据回显;
  • 指定主题样式(说是优点,但很多人也会认为这是缺点);

       1.表单标签入门

          我们首先使用一个登录表单来对比一下html表单和Struts2表单的区别。

          通过上面生成的代码可以看来: 

  • <s:form>
    通过action和namespace两部分来指定请求路径,action直接给<action>元素的name值即可,无需给出后缀“.action”;
    method默认为post;
    会自动添加id属性,值与action属性值相同;
    整个表单会生成在<table>中。
  • <s:textfield>
    对应<input type=”text”>标签;
    通过lable来生成<lable>标签;
  • <s:password>
    对应<input type=”password”>标签;
    通过label来生成<lable>标签
  • <s:submit>
    对应<input type=”submit”>标签;

          2.表单主题:

              我们发现,整个表单都会在<table>中生成,这也就说明无需为每个表单项添加<br/>。因为在表格中就无需再换行了。生成在表格中是因为<s:form>标签的theme属性的默认值为xhtml,它表示一个主题样式。这个主题样式由Freemarker模板来完成。如果你不希望使用这个xhtml主题,那么有下列3种方法来修改主题:

  1. 在<s:textfield>的theme属性指定为simple,那么这个表单项就使用简单主题;
  2. 在<s:form>的theme属性指定为simple,那么整个表单都使用简单主题;
  3. 设置struts.ui.theme常量为simple,那么所有表单标签的默认主题都是simple。      当表单设置为theme=”simple”之后:
<s:formaction="LoginAction"namespace="/user"theme="simple">
    <s:textfieldname="username"label="用户名"/>
    <s:passwordname="password"label="密 码"/>
    <s:submitvalue="登录"/>
</s:form>
<formid="LoginAction"name="LoginAction"action="/ognl/user/LoginAction.action"method="post">
 <inputtype="text"name="username"value=""id="LoginAction_username"/>
 <inputtype="password"name="password"id="LoginAction_password"/>
 <inputtype="submit"id="LoginAction_0"value="登录"/>
</form>

         这时没有表格来格式化表单,而且也不能生成<lable>,这说明样式都要自来来设定。好处是你重新获得了自由,坏处是一切都要靠自己了。

          3.自动回显

            我们知道,当表单提交后,再返回到表单页面后,html标签不可能帮我们回显数据。而Struts2的表单标签可以做到这一点。原因是当前Action就在值栈顶,而表单标签会从值栈中获取数据来回显。

表单标签之选择性标签

  • <s:redio>标签
    表单标签中简化比较大的标签可以不在需要写循环,还有就是自动回显。我们都知道在下拉列表、单选、复选中,手动回显是比较麻烦的事。但使用Struts2的表单标签就方便多了
<s:radiolist="#{'male':'男','female':'女'}" name="gender"/>

           list指定的是一个Map,默认key为实际值,而value为显示值。

           也可以为list属性指定为list:

<s:radiolist="{'男','女'}"name="gender"/>

           这时实际值和显示值是相同的。

  • <s:checkboxlist>标签

  这个东西也很好用,一下子可以显示很多复选按钮。而且自动回显!

<s:checkboxlistlist="#{'read':'看书','netplay':'上网','music':'音乐' }" name="hobby"/>
  • <s:select>标签

        下拉列表与上面两个标签也一样,都是选择性的!使用它也是无需循环,无需处理循环。

<s:selectname="city"list="#{'bj':'北京','sh':'上海','gz':'广州'}"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值