`
zengshaotao
  • 浏览: 791778 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2标签

 
阅读更多
要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的代码:

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


If elseif  else
描述:
执行基本的条件流转。
参数:
名称
必需
默认
类型
描述
备注

test

 
boolean
决定标志里的内容是否显示的表达式
else标志没有这个参数

id

 
Object/String
用来标识元素的id。在UI和表单中为HTML的id属性
 



例子:
<s:set name="age" value="61"/>

<s:if test="${age > 60}">
    老年人
</s:if>
<s:elseif test="${age > 35}">
    中年人
</s:elseif>
<s:elseif test="${age > 15}" id="wawa">
    青年人
</s:elseif>
<s:else>
    少年
</s:else>

<s:set name="name" value="<%="'"+ request.getParameter("name")+"'" %>"/>
<%
  System.out.println(request.getParameter("name"));
%>
<s:if test="#name=='zhaosoft'">
  zhaosoft here
</s:if>
<s:elseif test="#name=='zxl'">
  zxl here
</s:elseif>
<s:else>
  other is here
</s:else>

Iterator(迭代)

描述:用于遍历集合(java.util.Collection)或枚举值(java.util.iterator)

参数

名称
必需
默认
类型
描述

status

 
String
如果设置此参数,一个IteratorStatus的实例将会压入每一个遍历的堆栈

value

 
Object/String
要遍历的可枚举的(iteratable)数据源,或者将放入的新列表(List)的对想

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



I18n(国际化操作)

描述:

加载资源包到值堆栈。它可以允许text标志访问任何资源包的信息。而不只当前的action相关联的资源包。

名称
必需
默认
类型
描述

name

 
Object/String
资源包的类路径(如com.xxxx.resources.AppMsg)

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



Include

描述:包含一个servlet的输出(servlet或jsp的页面)

名称
必需
默认
类型
描述

value

 
String
要包含的jsp页面或servlet

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性




param

描述:属性是可选的,如果提供,会调用Component的方法,addParameter(String,Object),如果不提供,则外层嵌套标签必须实现UnnamedParametric接口。

Value的提供有两种方式,通过value属性或者标签中间的text,不同之处:

<s:param name="name">zhaosoft</s:param>
参数会以String的格式放入statck
<s:param name="name" value="zhaosoft"/>
该值会以java.lang.Object的格式放入statck

名称
必需
默认
类型
描述

name

 
String
参数名

value

 
String
value表达式

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



set

描述:set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有用:复杂的表达式很耗时(性能提升)或者很难理解(代码的可读性提高)

参数:

名称
必需
默认
类型
描述

name

 
String
变量名字

scope

 
String
变量作用域,可以为application,session,request,page,action

value

 
Object/String
将会赋给变量的值

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



Text

描述:支持国际化信息的标签。国际化信息必须放在一个和当前action同名的resource bundle中,如果没有找到相应message,tag body将被当作默认的message,如果没有tag body,message的name会被作为默认message.

名称
必需
默认
类型
描述

name

 
String
资源属性的名字

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



url

描述:该标签用于创建url,可以通过”param”标签提供request参数。

当includeParams的值是all或get,param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值。











UI标志

单行文本框

Textfield标签输出一个HTML单行文本输入控件,等价于HTML代码<input type=”text”>

名称
必需
默认
类型
描述

maxlength


Integer
文本输入控件可以输入字符的最大长度

readonly

false
Boolean
当该属性为true时,不能输入

size


Integer
指定可视尺寸

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



例子:

<s:form action="register" method="post">
   <s:textfield name="username" label="用户名"></s:textfield>
</s:form>



文本框区

Textarea标签输出一个HTML多行文本输入控件,等价于HTML代码:<textarea />

名称
必需
默认
类型
描述

cols


Integer
列数

rows


Integer
行数

readonly

false
Boolean
当该属性为true时,不能输入

wrap

false
Boolean
指定多行文本输入控件是否应该换行

id

 
Object/String
用来标识元素的id。在ui和表单中为HTML的id属性



例子:

<s:textarea name="personal" cols="10" rows="5" label="个人简历"></s:textarea>



下拉列表

s:select 标签输出一个下拉列表框,相当于HTML代码中的<select/>
名称
必需
默认
类型
描述

list


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey


String
指定集合对象中的哪个属性作为选项的value

listValue


String
指定集合对象中的哪个属性作为选项的内容

headerKey


String
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue


String
显示在页面中header选项内容

emptyOption

false
Boolean
是否在header选项后面添加一个空选项

multiple

false
Boolean
是否多选

size


Integer
显示的选项个数



例子:

%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<h3>使用name和list属性,list属性的值是一个列表</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"/>
</s:form>

<h3>使用name和list属性,list属性的值是一个Map</h3>
<s:form>
    <s:select label="最高学历" name="education" list="#{1:'高中',2:'大学',3:'硕士',4:'博士'}"/>
</s:form>

<h3>使用headerKey和headerValue属性设置header选项</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"
       headerKey="-1" headerValue="请选择您的学历"/>
</s:form>


<h3>使用emptyOption属性在header选项后添加一个空的选项</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"
       headerKey="-1" headerValue="请选择您的学历"
       emptyOption="true"/>
</s:form>


<h3>使用multiple属性设置多选</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"
       headerKey="-1" headerValue="请选择您的学历"
       emptyOption="true"
       multiple="true"/>
</s:form>

<h3>使用size属性设置下拉框可显示的选项个数</h3>
<s:form>
    <s:select label="最高学历" name="education" list="{'高中','大学','硕士','博士'}"
       headerKey="-1" headerValue="请选择您的学历"
       emptyOption="true"
       multiple="true" size="8"/>
</s:form>


<h3>使用listKey和listValue属性,利用Action实例的属性(property)来设置选项的值和选项的内容</h3>
<s:form>
    <s:select label="最高学历" name="education" list="educations"
       listKey="id" listValue="name"/>
</s:form



doubleselect标签
doubleselect标签输出关联的两个HTML列表框,产生联动效果。
名称
必需
默认
类型
描述

list


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey


String
指定集合对象中的哪个属性作为选项的value,该选项只对第一个列表框起作用

listValue


String
指定集合对象中的哪个属性作为选项的内容,该选项只对第一个列表框起作用

headerKey


String
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue


String
显示在页面中header选项内容

emptyOption

false
Boolean
 

multiple

false
Boolean
是否多选

size


Integer
显示的选项个数,该选项只对第一个列表框起作用

doubleId


String
指定第二个列表框的ID

doubleList


Cellection Map Enumeration Iterator array
要迭代的集合

doubleListKey


String
指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用

doubleListValue


String
指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用

doubleSize


Integer
选项个数

doubleName


String
指定第二个列表框的name映射

doubleValue


Object
第二个列表框的初始选种项



实例:
<s:form name="test">
    <s:doubleselect label="请选择所在省市"
       name="province" list="{'四川省','山东省'}" doubleName="city"
       doubleList="top == '四川省' ? {'成都市', '绵阳市'} : {'济南市', '青岛市'}" />
</s:form>

<s:form action="doubleselectTag">
    <s:doubleselect
            label="请选择所在省市"
            name="province"
            list="provinces"
            listKey="id"
            listValue="name"
            doubleList="cities"
            doubleListKey="id"
            doubleListValue="name"
            doubleName="city"
            headerKey="-1"
            headerValue="---------- 请选择 ----------"
            emptyOption="true" />
</s:form>

复选框
名称
必需
默认
类型
描述

fieldValue

true
String
指定在复选框选中时,实际提交的值



复选框组,对应Action中的集合
名称
必需
默认
类型
描述

list


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey


String
指定集合对象中的哪个属性作为选项的value

listValue


String
指定集合对象中的哪个属性作为选项的内容


例子:checkboxlistTag.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form>
    <s:checkboxlist name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/>
</s:form>

单击复选框


文件选择组建

file标签输出一个HTML文件选择框。

名称
必需
默认
类型
描述

accept

input
String
HTML accept属性,指出接受文件的MIME类型



按钮
Submit标签输出一个按钮,submit标签和form标签使用可以提供异步表单提交功能。Submit标签可以输出以下三种类型的提交按钮:

Input: 等价于 HTML代码<input type=”submit”>

Image: 等价于 HTML代码 <input type="image">
Button:<button type="submit"></button>
名称
必需
默认
类型
描述

type

input
String
要使用的提交按钮的类型,有效值:input button image

src


String
为image类型的提交按钮设置图片地址。该属性对input和button类型的提交按钮无效

action


String
指定处理提交请求的action

method


String
指定处理提交请求的action的方法


实例

实例1.<s:submit type="image" method="login" src="images/login.jpg"></s:submit>
页面输出:
<input type="image" alt="Submit" src="images/login.jpg" id="user__login" name="method:login" value="Submit"/>
实例2.<s:submit type="button" action="selectTag" method="login" label="登陆"></s:submit>
页面输出:
<button type="submit" id="user_selectTag_login" name="action:selectTag!login" value="Submit">登陆</button>
Struts2预定义的前缀:
1。method   method:login

使用method前缀,来取代action默认的execute()方法的执行。

<s:form action="user">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆" name="method:login"></s:submit>
   <s:submit value="注册" name="method:register"></s:submit>
</s:form>

注意:1。input类型的按钮,不能用label设置按钮上的文本,只能用value
2、action前缀
使用action前缀,取代form标签指定的action,导向到另一个action进行处理。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="注册" name="action:register"></s:submit>
</s:form>

2、redirect前缀
使用redirect前缀请求重定向到其他的url,甚至可以是web英语程序外部的url。
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect:www.google.com"></s:submit>
</s:form>
2、redirect-action前缀
使用redirect-action前缀请求重定向到其他的action.
<s:form action="login">
   <s:textfield name="user.username" label="用户名"></s:textfield>
   <s:textfield name="user.password" label="密码"></s:textfield>
   <s:submit value="登陆"></s:submit>
   <s:submit value="搜索" name="redirect-action:register"></s:submit>
</s:form>
reset标签
reset标签输出一个重置按钮
名称
必需
默认
类型
描述

type

input
String
要使用的重置按钮的内容,input、button



<s:reset value="重置"></s:reset>
<s:reset type="button" label="重置"></s:reset>
updownselect标签
updownselect标签创建一个带有上下移动的按钮的列表框,可以通过上下移动按钮来调整列表框的选项的位置。

名称
必需
默认
类型
描述

list


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容

listKey


String
指定集合对象中的哪个属性作为选项的value

listValue


String
指定集合对象中的哪个属性作为选项的内容

headerKey


String
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue


String
显示在页面中header选项内容

emptyOption

false
Boolean
是否在header选项后面添加一个空选项

multiple

false
Boolean
是否多选

size


Integer
显示的选项个数

moveUplabel

 
String
设置向上移动按钮上的文本

moveDownLabel

 
String
设置向下移动按钮上的文本

selectAllLabel

 
String
设置向全部选择按钮上的文本

allowMoveUp


Boolean
设置是否使用向上移动按钮

allowMoveDown


Boolean
设置是否使用向下移动按钮

allowSelectAll


Boolean
设置是否使用全部选择按钮



实例:
<s:form>
<!-- 使用简单集合来生成可上下移动选项的下拉选择框 -->
<s:updownselect name="a" label="请选择您喜欢的图书" labelposition="top"
    moveUpLabel="向上移动"
    list="{'Spring2.0宝典' , '轻量级J2EE企业应用实战' , 'JavaScript: The Definitive Guide'}"/>
   
   
<!-- 使用简单Map对象来生成可上下移动选项的下拉选择框
     且使用emptyOption="true"增加一个空选项-->
<s:updownselect name="b" label="请选择您想选择出版日期" labelposition="top"
    moveDownLabel="向下移动"
    list="#{'Spring2.0宝典':'2006年10月' , '轻量级J2EE企业应用实战':'2007月4月' , '基于J2EE的Ajax宝典':'2007年6月'}"
    listKey="key"
    emptyOption="true"
    listValue="value"/>
   
<s:bean name="com.zhaosoft.ui.formtag.BookService" id="bs"/>
<!-- 使用集合里放多个JavaBean实例来可上下移动选项的生成下拉选择框 -->
<s:updownselect name="c" label="请选择您喜欢的图书的作者" labelposition="top"
    selectAllLabel="全部选择" multiple="true"
    list="#bs.books"
    listKey="author"
    listValue="name"/>
</s:form>

package com.zhaosoft.ui.formtag;
public class BookService
{
    public Book[] getBooks()
    {
       return new Book[]
       {
           new Book("Spring2.0宝典","zhaosoft"),
           new Book("轻量级J2EE企业应用实战","zhaosoft"),
           new Book("基于J2EE的Ajax宝典","zhaosoft")
       };
    }
}



optiontransferselect标签
optiontransferselect标签创建一个选项转移列表组建,它由两个<select>标签以及它们之间的用于将选项在两个<select>之间相互移动的按钮组成。表单提交时,将提交两个列表框中选中的选项。
名称
必需
默认
类型
描述

list


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容,该选项只对第一个列表框起作用

listKey


String
指定集合对象中的哪个属性作为选项的value,该选项只对第一个列表框起作用

listValue


String
指定集合对象中的哪个属性作为选项的内容,该选项只对第一个列表框起作用

headerKey


String
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

headerValue


String
显示在页面中header选项内容

multiple

false
Boolean
是否多选

size


Integer
显示的选项个数,该选项只对第一个列表框起作用

doubleId


String
指定第二个列表框的ID

doubleList


Cellection Map Enumeration Iterator array
要迭代的集合,使用集合中的元素来设置各个选项,如果doubleList的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容,该选项只对第二个列表框起作用

doubleListKey


String
指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用

doubleListValue


String
指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用

doubleHeaderKey


String
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值

doubleHeaderVale


String
显示在页面中header选项内容

doubleEmptyOption


String
是否在第二列表框的header后面添加一个空选项

doubleMultiple

true
Boolean
是否多选

doubleSize


Integer
选项个数

doubleName


String
指定第二个列表框的name映射

doubleValue


Object
第二个列表框的初始选种项

leftTitle


String
左边列表框的标题

rightTitle

<-
String
右边列表框的标题

addToLeftLable

 
String
 

addToRightLable
 
 
 
 

addAllToLeftLable
 
 
 
 

addAllToRightLable
 
 
 
 

leftUpLabel
 
 
 
 

leftDownLabel
 
 
 
 

rightUpLabel
 
 
 
 

rightDownLabel
 
 
 
 

allowAddToLeft
 
 
 
 

allowAddToright
 
 
 
 

allowAddAllToLeft
 
 
 
 

allowAddAllToRight
 
 
 
 

allowSelectAll


Boolean
设置是否使用全部选择按钮

allowUpdownOnLeft
 
 
 
 

allowUpDownOnRight
 
 
 
 



例子:
<s:head/>
<s:form>
    <s:optiontransferselect
    label="最喜爱的图书"
        name="javaBook"
        list="{'《Java Web开发详解》', '《Struts 2深入详解》', '《Java快速入门》'}"
        doubleName="cBook"
        doubleList="{'《VC++深入详解》', '《C++ Primer》', '《C++程序设计语言》'}"/>
</s:form>
---------------------------
<s:form>
    <s:optiontransferselect
    label="最喜爱的图书"
        name="book1"
        leftTitle="Java图书"
        rightTitle="C/C++图书"
        list="{'《Java Web开发详解》', '《Struts 2深入详解》', '《Java快速入门》'}"
        headerKey="-1"
        headerValue="--- 请选择 ---"
        emptyOption="true"
        doubleName="book2"
        doubleList="{'《VC++深入详解》', '《C++ Primer》', '《C++程序设计语言》'}"
        doubleHeaderKey="-1"
        doubleHeaderValue="--- 请选择 ---"
        doubleEmptyOption="true"
        addToLeftLabel="向左移动"
        addToRightLabel="向右移动"
        addAllToLeftLabel="全部左移"
        addAllToRightLabel="全部右移"
        selectAllLabel="全部选择"
        leftUpLabel="向上移动"
        leftDownLabel="向下移动"
        rightUpLabel="向上移动"
        rightDownLabel="向下移动"/>
</s:form
分享到:
评论

相关推荐

    struts2标签使用例子

    在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...

    struts2标签库例子

    Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...

    Struts2标签集锦(附Struts2标签详解word文档)

    Struts2标签是Java开发中一个非常重要的工具,它极大地简化了MVC框架下的视图层构建,使得开发者能够更加高效地实现动态网页。在Struts2框架中,标签库是一系列预定义的JSP标签,它们提供了丰富的功能,如数据绑定、...

    使用Struts 2标签的注意事项

    Struts 2 标签的使用注意事项 Struts 2 是一个基于MVC架构的Java Web应用程序框架,它提供了一系列的标签来简化Web开发。然而,在使用Struts 2标签时,需要注意一些重要的事项。 首先,在使用Struts 2标签之前,...

    struts2标签库struts2标签库struts2标签库

    "Struts2标签库详解" Struts2标签库是Struts2框架中的一个重要组件,它提供了一系列的标签,帮助开发者快速构建Web应用程序。在Struts2标签库中,标签可以分为UI标签和非UI标签两大类。UI标签用于生成HTML控件,如...

    Struts2标签使用及API文档

    在Struts2框架中,标签库是其重要组成部分,它提供了丰富的标签来帮助开发者更方便地构建用户界面。下面我们将深入探讨Struts2标签的使用及其API文档。 1. **Struts2标签的分类与功能** - **控制标签**:如`s:if`,...

    struts2标签使用方法

    在Struts2中,标签库是其核心特性之一,它提供了一系列预定义的JSP标签,用于简化视图层的编码,提高代码的可读性和可维护性。下面我们将详细探讨Struts2标签的使用方法以及EL(Expression Language)表达式。 1. *...

    struts2标签下的用户注册

    2. **Struts2标签**:Struts2提供了一系列自定义标签来简化视图层的开发。例如,我们可以使用`&lt;s:textfield&gt;`标签来创建输入框,`&lt;s:password&gt;`标签用于密码输入,`&lt;s:submit&gt;`标签则用于提交表单。 ```jsp ...

    Struts2标签中文文档(html和chm格式)

    在Struts2框架中,标签库是其核心特性之一,它提供了丰富的UI组件和控制逻辑,使得开发者可以更加便捷地进行页面渲染和交互处理。本文将深入探讨Struts2标签的中文文档,以及如何利用这些文档进行有效开发。 首先,...

    struts2 标签库使用文档

    Struts2标签库的组成 Struts2框架的标签库可以分为以下三类: 用户界面标签(UI标签):主要用来生成HTML元素的标签。 表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 非表单标签:主要用于生成...

    struts2标签+ tiles lib

    本文将深入探讨Struts2标签和Tiles库的使用,以及它们在实际开发中的应用。 1. **Struts2标签** Struts2提供了丰富的标签库,这些标签使得开发者能够在JSP页面中方便地实现业务逻辑和控制流程。例如: - `s:...

    Struts2之struts2标签库了解和使用案例struts025

    首先,Struts2标签库分为两大类:核心标签库和展示标签库。核心标签库提供了一组基础功能,如表单处理、控制流程、消息显示等,而展示标签库则包含更具体的UI元素,如数据展示、分页等。了解这些标签库的使用,可以...

    struts2 标签 tags API 参考文档

    参考文档是开发者理解和使用Struts2标签的关键资源,它详细阐述了每个标签的功能、属性、用法及示例,有助于快速学习和掌握Struts2的视图层开发。 通过深入学习和实践Struts2的标签API,开发者可以有效地提升Web...

    Struts 2标签的应用

    利用Struts 2标签创建ex3.jsp页面,此页面提交给tag.action,在structs.xml中配置这个action的转发视图为result.jsp在result.jsp页面中显示ex3.jsp页面控件的值。(源代码和实验报告)

    struts2标签库的使用pdf+Word格式

    Struts2标签库是Java Web开发中非常重要的一个部分,它是Apache Struts框架的一部分,用于简化JSP页面的编写,提高代码的可读性和可维护性。本资源包含了一个PDF和Word格式的文档,旨在详细介绍如何使用Struts2的...

    struts2标签详解与实例

    Struts2标签详解与实例 在Java Web开发中,Struts2框架因其强大的MVC(模型-视图-控制器)架构而备受青睐。Struts2提供了丰富的标签库,简化了视图层的开发,使开发者可以更加专注于业务逻辑。本文将深入探讨Struts...

    struts2 标签

    struts2 标签 Taglib (Struts2标签库)

Global site tag (gtag.js) - Google Analytics