struts2框架5

struts2 标签库

tag-reference.html 就是 struts2 标签规范

1、 通用标签库 的学习

<s:property> 解析ognl表达式,设置默认值,设置内容是否HTML转义


<s:set> 向四个数据范围保存数据


<s:iterator> 遍历值栈中数据



<s:if> <s:elseif><s:else> 进行条件判断-------- elseif 可以有多个


<s:url> 进行URL重写(追踪Session ) ,结合s:param 进行参数编码

       *   <s:url action="download"namespace="/" var="myurl">

                     <s:param name="filename"value="%{'MIME协议简介.txt'}"></s:param>

              </s:url>

              <s:property value="#myurl"/>


<s:a> 对一个链接进行参数编码

    *<s:a action="download" namespace="/" >下载MIME协议简介.txt

                     <s:paramname="filename" value="%{'MIME协议简介.txt'}"></s:param>

     </s:a>

OGNL 了解部分: 支持赋值操作和表达式串联 、 操作集合对象

        1)在值栈中保存一个对象

    <s:property value="price=1000,name='冰箱',getPrice()"/>  自动查找值栈中 price 和 name 属性 为其赋值 

        2) ognl操作集合

              <s:property value="products[0].name"/> 访问集合第一个元素name属性

              <s:property value="map['name']"/> 访问map中key为name的值

              {}直接构造List 元素、 #{} 直接构造 Map元素

                     <s:iterator value="{'aaa','bbb'}" var="s">

                            <s:property value="#s"/>

                     </s:iterator>

                     <s:iterator value="#{'ccc':'111','ddd':'222' }" var="entry">

                            <s:property value="#entry.key"/>

                     </s:iterator>             

2、 UI标签库的学习 (Form标签)

    使用struts2 form标签 好处 : 支持数据回显 , 对页面进行布局和排版(基于Freemarker 模板定义 )

标签的属性可以被赋值为一个静态的值或一个 OGNL 表达式. 如果在赋值时使用了一个 OGNL 表达式并把它用 %{} 括起来, 这个表达式将会被求值

       struts2表单标签 value属性。 必须写 %{} 进行设值

******* 使用struts2表单标签前, 必须配置 StrutsPrepareAndExecuteFilter

  TheStruts dispatcher cannot be found.  Thisis usually caused by using Struts tags without the associated filter. Strutstags are only usable when the request has passed through its servlet filter,which initializes the Struts dispatcher needed for this tag 

无法找到Struts调度程序。 这通常是由于使用没有关联过滤器的Struts标签造成的。 Struts标签只有在请求通过它的servlet过滤器时才可用,该过滤器初始化此标签所需的Struts调度器


<s:form> 表单标签

       <s:form action="regist" namespace="/" method="post"theme="xhtml">  ---   theme="xhtml" 默认布局样式

<s:textfield> 生成 <input type="text">     

<s:password > 生成 <inputtype="password" >


<s:submit type="submit"value="注册"/> 生成 <input type="submit">

submit 标签将呈现为一个提交按钮. 根据其 type 属性的值. 这个标签可以提供 3 种呈现效果:
input: <input type=“submit” value=“提交”…/>
button: <input type=“button” value=“确定” …/>

image: <input type=“image” value=“图片” src=“XX.jpg” …/>


<s:reset type="reset"value="重置" />   生成 <input type="reset" >

* struts2 除了支持JSP之外,支持两种模板技术Velocity (扩展名 .vm ) 、 Freemarker (扩展名 .ftl)    

 reset 标签将呈现为一个重置按钮. 根据其 type 属性的值. 
这个标签可以提供 2 种呈现效果:
input: <input type=“reset” value=“重置”…/>

button: <input type=“button” value=“重置按键” …/>


<s:textarea> 生成 <textarea> 多行文本框 

textarea 标签将呈现为一个 HTML 文本域元素


label 标签将呈现一个 HTML 行标元素: 


<s:checkboxlist> 生成一组checkbox

       *使用ognl构造 Map (看到值和提交值 不同时)

       *<s:checkboxlist list="#{'sport':'体育','read':'读书','music':'音乐' }" name="hobby"></s:checkboxlist>

<s:radio> 生成一组radio

       *使用 ognl构造 List  (看到内容和提交值相同时)

       *<s:radio list="{'男','女'}"name="gender"></s:radio>


如果集合为list

<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>

生成如下html代码:

<input type="checkbox" name="list" value="Java"checked="checked"/><label>Java</label>

<input type="checkbox" name="list" value=".Net"checked="checked"/><label>.Net</label>

<input type="checkbox" name="list" value="RoR"/><label>RoR</label>

<input type="checkbox" name="list"value="PHP"/><label>PHP</label>

如果集合为MAP

<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key"listValue="value"value="{1,2,3}"/>

生成如下html代码:

<input type="checkbox" name="map" value="1"checked="checked"/><label>瑜珈用品</label>

<input type="checkbox" name="map" value="2"checked="checked"/><label>户外用品</label>

<input type="checkbox" name="map" value="3"checked="checked"/><label>球类</label>

<input type="checkbox" name="map"value="4"/><label>自行车</label>

如果集合里存放的是javabean

 <%

  Person person1 = new Person(1,"第一个");

  Person person2 = new Person(2,"第二个");

  List<Person> list = new ArrayList<Person>();

  list.add(person1);

  list.add(person2);

  request.setAttribute("persons",list);

  %>

<s:checkboxlist name="beans" list="#request.persons"listKey="id"listValue="name"/>

idnamePerson的属性

生成如下html代码:

<input type="checkbox" name=beans" value="1"/><label>第一个</label>

<input type="checkbox" name=beans" value="2"/><label>第二个</label>

<s:select> 生成一个<select>

       *<s:select list="{'北京','上海','南京','广州'}" name="city"></s:select>

============= struts2 开发 密码框 默认不回显

      <s:password name="password"id="password" showPassword="true"/>

如果集合为list

<s:select name="list" list="{'Java','.Net'}"value="'Java'"/>

生成如下html代码:

<select name="list" id="list">

    <option value="Java" selected="selected">Java</option>

    <option value=".Net">.Net</option>

</select>

如果集合里存放的是javabean(idnamePerson的属性)

<s:select name="beans" list="#request.persons"listKey="personidlistValue="name"/>

生成如下html代码:

<selectname="beans" id="beans">

    <option value="1">第一个</option>

    <option value="2">第二个</option>

</select>

radio标签将呈现为一组单选按钮, 单选按钮的个数与程序员通过该标签的 list 属性提供的选项的个数相同.

一般地, 使用radio 标签实现多选一,对于 /则该使用 checkbox 标签.

该标签的使用和checkboxlist复选框相同。

如果集合里存放的是javabean(idnamePerson的属性)

<s:radio name="beans" list="#request.personslistKey="personidlistValue="name"/>

生成如下html代码:

<input type="radio" name="beans" id="beans1" value="1"/><label>第一个</label>

<input type="radio" name="beans" id="beans2" value="2"/><label>第二个</label>

如果集合为MAP

<s:radio name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key" listValue="value“ value="1"/>

生成如下html代码:

<input type="radio" name="map" id="map1" value="1"/><label for="map1">瑜珈用品</label>

<input type="radio" name="map" id="map2" value="2"/><label for="map2">户外用品</label>

<input type="radio" name="map" id="map3" value="3"/><label for="map3">球类</label>

<input type="radio" name="map" id="map4" value="4"/><label for="map4">自行车</label>

如果集合为list

<s:radioname="list" list="{'Java','.Net'}"value="'Java'"/>

生成如下html代码:

<inputtype="radio" name="list" checked="checked"value="Java"/><label>Java</label>

<inputtype="radio" name="list" value=".Net"/><label>.Net</label>

如果集合为MAP

<s:select name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value" value="1"/>

生成如下html代码:

<select name="map" id="map">

    <option value="1"selected="selected">瑜珈用品</option>

    <option value="2">户外用品</option>

    <option value="3">球类</option>

    <option value="4">自行车</option>

</select>

主题: 为了让所有的 UI 标签能够产生同样的视觉效果而归集到一起的一组模板. 风格相近的模板被打包为一个主题

    1simple: UI 标签翻译成最简单的 HTML 对应元素, 而且会忽视行标属性

    2xhtml: xhtml是默认的主题. 这个主题的模板通过使用一个布局表格提供了一种自动化的排版机制.默认值

    3css_xhtml: 这个主题里的模板与 xhtml主题里的模板很相似, 但它们将使用 css来进行布局和排版

    4ajax: 这个主题里的模板以 xhtml主题里德模板为基础, 但增加了一些 Ajax 功能

3、页面元素主题设置

   default.properties  ----  struts.ui.theme=xhtml 设置struts2 页面元素使用默认主题

                                struts.ui.templateSuffix=ftl 默认模板引擎 Freemarker       

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件配置文件源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

修改主题 :

        A、通过 UI 标签的 theme属性(只适用于当前的标签)

    <s:textfield name="username"  label="用户名

                                                    theme="simple"></s:textfield>

B、在一个表单里,若没有给出某个UI标签的theme属性,它将使用这个表单的主题

    (适用于整个form标签)

    <s:form action="" method="post" namespace="/ui“    theme="simple">

C、修改 struts.properties文件中的struts.ui.theme属性. (适用整个环境)

         <!-- 设置ui标签的主题 -->

         <constant name="struts.ui.theme"value="simple"></constant>

优先级:A>B>C

struts2标签自动回显


猜你喜欢

转载自blog.csdn.net/qq_24140237/article/details/79720554