struts框架bean html logic标签手册
Struts应用开发完全手册(html标签)

Struts应用开发完全手册Struts中HTML标签库中的大部分标签都与普通的HTML元素相对应,并且它们实现的功能与对应的HTML元素相同甚至更为强大。
建议读者在Struts应用中使用Struts标签,因为这些标签与Struts中的其他组件是紧密相连的,使用这样的标签在编写程序时会带来很大的帮助。
如:使用<html:form>标签定义一个页面表单,Struts会将表单中的数据通过反射机制自动映射到与该表单对应的Action Form Bean中。
本章讲解的重要标签如下。
● 表单元素标签● 下拉列表框标签● 检查框标签● <html:file>文件上传标签● <html:errors>与<html:messages>标签7.1 HTML标签库的使用在使用HTML标签库中的标签之前,要保证在当前应用的/WEB-INF/lib文件夹下存在strut s.jar文件。
该文件中包含了处理Struts中所有标签的类文件,然后再进行如下配置。
(1)在应用程序下的/WEB-INF/文件夹下新建tld文件夹。
(2)将Struts中的HTML标签库文件struts-html.tld复制到tld文件夹下。
(3)在web.xml文件中进行如下配置。
<taglib><taglib-uri>struts-html</taglib-uri><taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location></taglib>将struts-html.tld文件的路径定义为一个名称,以便在JSP文件中引用该名称来定义一个前缀,并通过该前缀来调用HTML标签库中的标签。
(4)在要使用标签的JSP文件中,通过<taglib>指令定义一个前缀来引用H TML标签库。
struts1标签

Struts1标签及应用struts标签库html标签--- 替代基本的html元素bean标签--- 访问JavaBeanlogic标签--- forif判断程序结构的标签化html标签1.html标签<% taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>基本html标记的替代标签a)基本的html元素标签(选择使用)<html:html> *****<html:html locale="true"> 对应<html lang="zh-CN"><html:base> *****<html:base/> 对应<base href="http://localhost:8080/aa.jsp">当前页面的地址<html:img> *******<html:img page="images/zhangying.gif"/>对应<img src="images/zhangying.gif">传参数<html:img page="jspimage.jsp" paramId="id" paramName="1"/> 对应<img src="jspimage.jsp?id=1"/>**** <html:link> 3个属性page href forward代替Html中超链接标记<a href="sueccess.jsp">跳转</a><html:link page="logout.jsp"> 相对路径page注销</html:link>对应<a href="logout.jsp">注销</a><html:link href=""> 绝对路径href sohu网站对应<a href="">sohu网站</a>struts-config.xml中的global-forwardsforward<html:link forward="success"> 对应全局转发成功页面</html:link>对应<a href="/success.jsp">成功页面</a>传参数:paramId 指定传参数的名字idparamName 指定参数的值1<html:link page="/deleteemp.do" paramId="id" paramName="1"> 删除</html:link>对应<a href="/deleteemp.do?id=1">删除</a><html:rewrite> 输出对应的URI 的字符串不产生超链接<html:rewrite page="/deleteemp.do" paramId="id" paramName="1"> 对应/deleteemp.do?id=1b)基本表单标签->form表单<html:form><html:text><html:hidden><html:reset><html:submit><html:password><html:checkbox><html:radio><html:file> ----- 文件类型<html:select>对应基本的表单元素property="" value=""<input type="text" name="user" value="">对应于<html:text property="user" value=""/><input type="checkbox" name="ah" value="1">体育<input type="checkbox" name="ah" value="2">游泳对应于<html:checkbox property="ah" value="1">体育</html:checkbox><html:checkbox property="ah" value="2">游泳</html:checkbox><html:file> ---文件的上传的标签common-fileupload-1.0.jar实现文件的上传actionForm中FormFile的类型代表file文件用处:<html:file/> 文件上传得<html:link/> 页面跳转的c)错误和正确信息标签*******jdk的bin中native2ascii.exe编码方式变为Unicode方式native2ascii -encoding gb2312 applicationResources.properties ApplicationResources_zh_CN.properties<html:errors/>输出所有actionError的内容<html:errors property="uname"/>输出key=uname对应的内容2.bean标签访问变量的属性或输出值访问JavaBeana)访问http请求信息和jsp隐式对象** <bean:cookie> cookie访问<bean:cookie id="mycookie" name="loginname" value="123"/> id -- 自己设置Cookie变量的名字name -- Cookie对象的名字value -- 默认值<bean:write name="mycookie" property="value"/>取出值<bean:write name="mycookie" property="name"/>取出名字Cookie c = new Cookie("loginname","northwind");c.getValue()c.getName()*** <bean:parameter>访问请求的参数request<bean:parameter id="arg1" name="username" value="north"/> <bean:write name="arg1"/>对应的Java代码request.getParameter("username");**** <bean:page> 访问jsp的隐式对象---属性sessiongetId() -> idgetCreationTime() -> creationTimeapplicationrequestresponse所有对象的get方法能访问到的属性都可以被这个标签访问属性的第一个字母变成小写后都可以访问<bean:page id="this_session" property="session"/><bean:write name="this_session" property="creationTime"/>b)访问资源*** <bean:message> 访问applicationResources中的消息<bean:message key="er"/> 输出key的值<bean:include> 包含资源到一个变量中动作<jsp:include page="testpage1.jsp"/>页面运行结果包含进来等价于下面2句话<bean:include id="tp1" page="/testpage1.jsp"/><bean:write name="tp1"/> 输出变量的内容输出的是页面的内容c) 定义和输出JavaBean***** <bean:define> 定义一个变量<bean:define id="aa" value="Hello"/><bean:write name="aa"/> -> Hello<bean:define id="bb" name="empbean" property="ename"/> JavaBean:empbean属性ename变量String bb = empbean.getEname();<bean:write name="bb"/> 得到empbean中属性ename的值*** <bean:write> 显示JavaBean及其属性或变量的内容<bean:write name="" property="" scope=""/>name=某个范围中的属性的名字(对象)property=JavaBean中的属性scope=访问对象的范围3.logic标签a)if elseif a=b then 等于不等于大于小于字符串匹配不匹配空值非空值b)循环for(int i=0;i<vect.size();i++){}对集合的遍历如何做??a)存在性<logic:present/> 是否存在某种变量cookie="cookie名字"header="request中的header"parameter="参数"name="变量或JavaBean" property=""scope="request/session/application"如果存在就输出标签体的内容相反的标签<logic:notpresent/>是否为空空- ""或null<logic:empty name="变量或JavaBean" property=""> </logic:empty>是否相等<logic:equal/>大于> <logic:greaterThan/>>= <logic:greaterEqual/>小于< <logic:lessThan/><= <logic:lessEqual/>匹配<logic:match/><logic:nomatch/>location 表示的是位置从开始匹配start从结束匹配end循环<logic:iterate><%Vector v = new Vector();v.add("1");v.add("2");v.add("3");v.add("4");request.setAttribute("number",v);%>id定义一个变量name定义变量的内容<logic:iterate id="ele" name="number"><bean:write name="ele"/></logic:iterate>对集合中所有元素的循环访问indexId 定义循环计数器变量ioffset 开始元素的位置length 要输出元素的个数<logic:iterate id="ele" indexId="index" name="number" offset="1"length="2"><bean:write name="index"/>.<bean:write name="ele"/><br></logic:iterate>c) logic转发和重定向<logic:forward name="index"/> 对应global-forwards转发到index<jsp:forward page="index"/><logic:redirect page="aa.jsp"/>重定向到aa.jspresponse.sendRedirect("aa.jsp")struts中文乱码问题的解决<1>编码转换函数<2>过滤器Action和jsp的开发其实就是对Struts标签的运用.掌握标签的熟练程度决定了开发效率.初学者往往对某个数据表示或数据获取,束手无策.一个简单的问题浪费一两天时间也就不足为怪了.导致整个开发进度延后.外面的struts书籍介绍标签和数据传输原理都比较简单,下面我对标签技术和数据传输原理,进行全方位多角度的剖析.希望对各位有所帮助.以此为模版,将大大提高开发效率.以sample为机能名称.①画面上有一text框,显现内容为某一数据表中的某一字段.那我们该如何设置和得到此数据呢? SampleJsp:< html:text name = "sampleForm" property="name" />SampleForm.java: // form文件名必须和jsp中标签的name对应String name; // 必须和jsp中该项目的property一样public String getName() { return name; }public void setName(String name) { = name;}变量和方法名,不可以顺意.变量abcd,那方法名就是setAbcd和getAbcd.注意大小写.jsp中的项目必然全部在form里面有所表示,当然反过来,form里的项目在jsp中不一定全部表示(可能有辅助动作的对象或验证)SampleAction.javapublic ActionForward start(ActionMapping mapping,ActionForm argForm, HttpServletRequest req, HttpServletResponse res)throws Exception {SampleForm form = (SampleForm) argForm;String name = ………………other codes for get name from db// set nameform.setName(name);// now text will show the name}public ActionForward save(ActionMapping mapping,ActionForm argForm, HttpServletRequest req, HttpServletResponse res) throws Exception {SampleForm form = (SampleForm) argForm;// get nameString name = form.getName();………………other codes for save name}jsp和form对应,action操作form,form其实起了传输数据的作用.这就是struts标签的核心原理.得到数据和设置数据没问题了,剩下的工作也就得心应手了.②再看一个处理标签的方法.画面上是一个明细一览表示(表).表示的是数据表user的相关数据(id,name).SampleJsp:< logic:present name="sampleForm" property="userList" >< logic:iterate id="user" name=" sampleForm " property="userList">< tr>< td>< bean:write name="user" property="id" />< /td>< td>< bean:write name="user" property="name" />< /td>< /tr>< /logic:iterate>< /logic:present>logic:present是逻辑判断,sampleForm中userList为空(无数据或null),下面的东东不显示. logic:iterate是逻辑循环,userList有几条数据,就循环几次.< bean:write name="user" property="id" />是lable标签,显示user这个对象(entity)的id属性.或者说显示数据表user中的一条记录中的id这个列.User.java(就是entity,因为和业务密切,高达不开发,切记切记不可顺意修改.遇到设计有问题,QA日本)String id;public String getId() { return id; }public void setId(String id) { this.id = id; }String name;public String getName () { return name; }public void setName (String name) { = name; }看到这,是否觉得面熟啊,好象和FORM一样,但有点不一样,不一样在哪里,看下去后,自己感悟吧. SampleForm.java:List userList;public List getUserList () { return userList; }public void setUserList (List userList) { erList = userList; }form只要这些,那你会问,id和name,struts如何能得到呢?你不是说过jsp必须和form一样对应吗?不错,一一对应是肯定的. UserList信息已经包含了一切,还需要定义id和name吗?至于struts如何得到数据,那就看下面的action是如何处理的吧.SampleAction.javapublic ActionForward start(ActionMapping mapping,ActionForm argForm, HttpServletRequest req, HttpServletResponse res) throws Exception {SampleForm form = (SampleForm) argForm;ArrayList userList = new ArrayList();User user = new User();user.setId(1);user.setName(“name1”);userList.add(user);User user = new User();user.setId(2);user.setName(“name2”);userList.add(user);// set userListform.setUserList(userList);// now table will show}一切搞定.是不是很简单,但估计你还是有点晕.你还是想问我,id和name到底是如何设置的? Action设置了userList就够了,它包含够多的信息了. struts看见了你设置了userList.它就知道了这个list里面都user(entity),useruser(entity)里面不是有很多get,set方法吗?再看下下面的东东.< logic:iterate id="user" name=" sampleForm " property="userList">< bean:write name="user" property="id" />id=”user”,和name="user" 对应了,明白啥意思吗?.就象循环指明索引一样. property="id"就是要显示的这个索引对应的内容.Struts就是这样来认id和name的.③接下来,看一个加强版的table例子,在显示的明细一览,每一行前面加一个radio框,让用户选择哪个user.进行删除操作.SampleJsp:< logic:present name="sampleForm" property="userList" >< logic:iterate id="user" name=" sampleForm " property="userList">< tr>< td>< html:radio name="sampleForm" property="selectedUserId"value="< %=((er)pageContext.getAttribute("user ")).getId().toString() %>" />< /td>< td>< bean:write name="user" property="id" />< /td>< td>< bean:write name="user" property="name" />< /td>< /tr>< /logic:iterate>< /logic:present>sampleForm.java:String selectedUserId;public String getSelectedUserId () { return selectedUserId; }public void setSelectedUserId(String selectedUserId) {this.selectedUserId = selectedUserId;}SampleAction.javapublic ActionForward delete(ActionMapping mapping,ActionForm argForm, HttpServletRequest req, HttpServletResponse res) throws Exception {SampleForm form = (SampleForm) argForm;String selectedUserId = form.getSelectedUserId();// get user by selected idUser user = getUser(selectedUserId);// delete user}radio框. propertys值对应form里的对象.value值是该行radio对应的user中的id(数据表中user的id是主键),那么当用户选中任何一个radio,struts通过form得到propertys值,就可以得到选中哪个user了,然后进行相应操作.设置哪个user被选中,一是通过用户选择,没的说.二,通过程序控制,如果进入初期画面,我要让user.id = …3‟的radio被选中,只要在初期Action中form.selectedUserId(“3”);一切搞定,就一句话,进入初期画面时, user.id = …3‟的radio被选中了.注意以下标签< html:radio name="sampleForm" property="selectedUserId" value="< %= ((er)pageContext.getAttribute("user")).getId().toString() %>" />下面发挥想象一下以下标签啥意思?< html:radio name="sampleForm" property="selectedUserId" value="< %= ((er)pageContext.getAttribute("user")).getObject1().getObject1().getObject2()…………getObjectN().getId().toString() %>" />能看出来什么?User包含object1,object2包含object3,….objectN-1包含objectN,objectN有id属性. 看出来了吗?灵活运用,想象一下,各个entity和form,action该如何写?④接着介绍一下,checkbox是使用.画面有一排checkbox,如何设置和得到数据呢?先看一个简单点的.< html:checkbox name=" sampleForm" property="chechbox1" value="true" /> < html:checkbox name=" sampleForm" property="chechbox2" value="false" /> < html:checkbox name=" sampleForm" property="chechbox3" value="true" /> 第二个框未选中,其他选中.form里面对应三个String chechbox1,chechbox2, chechbox3;下面来个复杂点的,多选择对话框multiboxSampleJsp中:< logic:iterate name = "sampleForm" id="user" property="userList">< html:multibox property="selectedUsers">< bean:write name="user" property="id"/>< /html:multibox>< bean:write name="user" property="name"/>< /logic:iterate>SampleForm中:private String userList[] = new String[0];public String[] getUserList () { return userList;}public void setUserList(String[]userList) {erList = userList;}private String selectedUsers[] = new String[0];public String[] getSelectedUsers () {return selectedUsers;}public void setSelectedUsers (String[]selectedUsers) {this.selectedUsers = selectedUsers;}如果我们在初期时在action里对bean赋值:userList = { User(”1”,”name1”),User(”2”, ”name2”), User(”3”,”name3”) } selectedUsers = {“1”,”3”}那画面选中第一第三个选择框.用户修改选择框,选择了第二,第三个,那么在action里取bean的值String selectedItems[] = new String[list.getSize()];selectedItems = form.getSelectedItems();for ( int i = 0 ; i < selectedItems.length ; ++i ){LOGGER.debug( "selected " + i + ": " + selectedItems[i]);}Selected 0 : 2Selected 1 : 3selectedUsers = {“2”,”3”}⑤画面上有一user表,每条数据前面有个button,对应一条记录,如何确定选中那条数据呢?? SampleJsp:< logic:iterate id="user" indexId="buttonIndex" name="sampleForm"property="userList">< tr>< td>< html:submit property="button" indexed='false' >< bean:message key="label.button.selectUser"/>< /td>< td>< bean:write name="user" property="id" />< /td>< td>< bean:write name="user" property="name" />< /td>< /tr>< html:hidden name="sampleForm" property="selectUserIndex" value='< %= "" + buttonIndex %>'/>< /logic:iterate>SampleAction.javaint index = Integer.parseInt(form.getSelectUserIndex());通过一个隐藏变量,得到选中第几条数据,然后就能做相应处理.⑥上面都是通过form和jsp传输数据的.还有session也能让jsp显示数据.但如果我做为设计者,是不提倡这样做的.为什么就不说了.但日本以前的设计很可能会用到session和jsp传数据.那我就有必要讲一下如何用了?做为高达的设计者还是尽量不要用session和jsp沟通.有个下拉列表框,里面显示所有用户名称.用session传数据.SampleJsp:< %pageContext.setAttribute("userList",(List) (FwThreadContext.getAttribute("AllUser")));%>< html:select property="selectedUser">< html:options collection="userList" property="id" labelProperty="name" />< /html:select>SampleForm.java:String selectedUser;Form里只要一个selectedUser,表示选择的user. 下拉列表框用session表示.在action等地方设置了session的内容,那下拉列表框就能显示内容了.这里session名为AllUser, labelProperty="name"是下拉列表框显示的东东, property="id"是下拉列表框每条数据隐藏的东东.通过property="selectedUser"里得到选中那条数据< html:text name="sampleForm" property="name"value="< %= (FwThreadContext.getAttribute("UserName")).toString() %>" />这里很简单就是把session名为UserName设置到Text框中.得的时候还是通过form中的name得到.标签宝典:1,lable< bean:write name="sampleForm" property="name" />2,text< html:text name="sampleForm " property="name" />3,button< html:submit property="button">< bean:message key="label.button.save" />< /html:submit>< html:button property="button" onclick="javascript:openCalendar(date);">< bean:message key="label.button.date" />< /html:button>4,select< html:select property="selectedUser">< html:options name="sampleForm" collection="userList" property="id" labelProperty="name" />< /html:select>5,checkbox,multibox< html:checkbox name="sampleForm" property="chechbox1" value="true" />< logic:iterate name = "sampleForm" id="user" property="userList">< html:multibox property="selectedUsers">< bean:write name="user" property="id"/>< /html:multibox>< bean:write name="user" property="name"/>< /logic:iterate>6, 循环逻辑< logic:present name="sampleForm" property="userList" >< logic:iterate id="user" name=" sampleForm " property="userList">< tr>< td>< html:radio name="sampleForm" property="selectedUserId" value="< %= ((er)pageContext.getAttribute("user")).getId().toString() %>" />< /td>< td>< bean:write name="user" property="id" />< /td>< td>< bean:write name="user" property="name" />< /td>< /tr>< /logic:iterate>< /logic:present>7,if逻辑< logic:equal name=" sampleForm " property="showAllFlg" value="true" > < html:submit property="button">< bean:message key="label.button.all"/>< /html:submit>< /logic:equal>< logic:equal name=" sampleForm " property=" showAllFlg " value="false" > < html:submit property="button">< bean:message key="label.button.noall"/>< /html:submit>< /logic:equal>。
htmllogic

Struts的Logic标签可以根据特定的逻辑条件来判断网页的内容,或者循环遍历集合元素,它和HTML,Bean标签是Struts应用种最常用的三个标签.它的功能主要是比较运算,进行字符串的匹配,判断指定的内容是否存在,循环遍历集合,进行请求转发和重定向,下面具体的说明标签的用途:<logic:equal>变量等于指定的常量<logic:notEqual>变量不等于指定的常量<logic:lessThan>变量小于指定的常量<logic:lessEqual>变量小于或者等于指定的常量<logic:greaterThan>变量大于指定的常量<logic:geraterEqual>变量大于或等于指定的常量以上这些标签都很类似, 有共同的属性,cookie属性指定cookie属性的值,然后用value设置的常量进行比较.header属性设置header请求头的值,也是通过value属性设置的值进行比较.parameter属性设置一个请求参数,然后也是通过value属性设置的值进行比较.name属性设置一个变量,然后用value比较.如果同时设置了name和property属性,此时name属性指定已经存在的JavaBean,property属性指定Bean的属性.这个标签感觉十分简单,用法也十分单一,下面研究一下进行字符串匹配的标签和判断特定内容的标签.< logic:match>标签是判断变量种是否包含常量字符串的,<logic:netMatch>也判断是否不包含字符串的,用name属性定义一个字符串变量,然后用value属性的值去判断变量是否包含这个字符串或者是不包含这个字符串,判断成功返回true.<logic:empty>和<logic:netEmpty>标签可以判断指定的变量是否为空的字符串,可以通过name属性来判断一个字符串是否为null.例如是请求参数的字符串.< logic:present>和<logic:notPresent>标签可以判断指定的对象是否为空,这个标签的属性很多. cookie属性判断Cookie是否存在.Header属性判断HTPP请求头是否存在.role属性是判断当前的权限的用户是否是指定的安全角色. user属性是判断当前通过权限验证的用户是否拥有指定的用户名.parameter属性是判断请求的参数是否存在.name属性是用来判断指定的Bean 是否存在.同时设置name和property属性就是判断Bean种的具体属性是否存在了.< logic:messagesPresent>和<logic:messagesNotPresent>标签是用来判断是否在request范围内的特定的ActionMessages或者是子类ActionErrors对象.name属性是用来检索ActionMessages对象的key,property指定从ActionMessages集合对象中检索某条消息key也就是具体的ActionMessage对象.进行循环遍历Logic标签是Logic标签库中最复杂的标签,也是用途最广泛的标签,它能够在一个循环中遍历数组,Collection,Enumeration,Irerator或者Map中的所有元素1) 遍历集合的标签< logic:iterate>的name属性指定需要进行遍历的集合对象,它每次从集合中检索出一个元素,然后存放在page范围内,并以id属性指定这个字符串来命名这个元素,最好是在里面嵌套一个<bean:write>标签,把刚刚遍历的第一个id指定的字符串输出,然后在循环在输出.length属性需要遍历的元素的数目,如果没有设置length属性,就遍历集合中的所有元素.offset属性指定开始遍历的其实位置,默认值是0.indexId属性定义一个代表当前被遍历元素的系列号,这个变量存放在page范围内,可以被<bean:write>标签访问输出输出的是int的数字.例如1.2.3.4等.可以用户输出输出的元素的系列号.2) 遍历Map 是通过<logic:iterate>标签,name属性指定一个HashMap,存放在request 范围,然后赋给id指定的变量, indexId可以指定索引编号,然后通过<bean:write>标签输出出来.在HashMap的每一个元素都是一个集合对象,所以可以嵌套使用.就是说<logic:inerate>这个标签既可以把Collection的元素弄出来负给一个变量也可以弄Map的.所以说它的功能强大.还有一个collection属性可以设置一个表达式,这个表达式返回的结果可以作为,<logic:inerate>标签输出的集合或者Map.这个属性类似name属性.最后研究一下进行请求转发和重定向的Logic 标签,<logic:forward>标签用于请求转发,它的name属性指定转发的目标,与Struts配置文件中的<global -forwards>元素和的子元素<forward>元素匹配.简单的说就是<logic:forward>标签的name属性定义的值,要去找到<golbal-forwards>子元素<forward>元素的匹配的name属性,然后通过path指定的路径进行转发.重定向用<logic:redierct>标签它的forward,href和page属性指定重定向的目标,这几个属性和<html:link>标签的属性用法十分相似.关于标签的部分我就说到这里,因为我个人觉得在Struts中最常用的无非也就是这三个标签库了.我以前还写过一个Struts的分页应用,过些天继续发布到我的Blog上.struts的LOGIC标签的多层迭代logic:Iterator 标签(以下简称“ 该标签” )是Struts 里非常常用的一个标签,其作用在于循环显示给定容器对象中的值。
Struts标签(大全)一

下面的代码片段示例了如何使用bean:cookie标签读取名为JSESSIONID的cookie的值,并且使用了两种方式进行了输出:
<logic:present cookie="JSESSIONID">
<bean:cookie />
<!--gt;
HTML Tags:该标签库包含的标签可以用来创建Struts输入表单。
Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。
Nested Tags:该标签库建立在前三个标签库的基础上,具有前三个标签库的所有功能,只是允许标签间的嵌套。
Tiles Tags:该标签库包含的标签可以用来创建tiles样式的页面。
type="java.util.List"/>
下面给出ListForm的代码片段以帮助您更好的理解,其中Person是一个只有id和name两个属性的简单bean:
public class ListForm extends ActionForm {
private List<Person> persons = null;
<!-- JSP脚本通过scripting变量使用该值 -->
<%
out.println(value);
%>
回页首
bean:message标签用来从指定的locale中取回国际化的消息并输出,在这个过程中我们还可以传递五个以内的参数。message key可以通过key直接指定,也可以通过name和property间接的指定。
我们可以使用三种方式为新创建的属性和scripting变量赋值:
Struts使用指南

Web应用结构图
MVC模式
View 显示视图实现。使用Jsp技术; Controller 控制协调。使用Servlet等技术; 接受Jsp数据或推出Jsp视图 Model 后台模型。表示业务层。 注意: 1. 在Jsp中不写入与显示无关的Java代码。 2. 在Servlet中不写入业务核心功能代码。
ActionForm定义
ActionForm是表单的抽象对象,AF字段对应表单 的字段,AF是数据对象。 AF是界面对象,是Domain Model界面实现。
MyActionForm extends ActionForm{ String id; public void setId(String id){ this.id = id} public String getId(){ return id;} }
标签的作用
实现离散表单项目和对象之间的转换,实 际就是一个转换配置。类似ORM中映射配 置,也属于映射配置。
为什么不喜欢用标签?如果没有对象概念, 当然没有转换映射的需求,所以不会用标 签。
标签的原理
标签基本单元:name 和property Name: struts在当前scope(取决于配置, 一般是request)中寻找符合name值的对象, 实质是request.getAttribute(name值)。
Property:通过反射机制,寻找name对象 中是否存在property这个方法。执行 PropertyUtils.getProperty方法
神奇核心:PropertyUtils
mons.beanutils.PropertyUt ils是apache的一个通用包功能: 使用Java Reflection APIs方便从一种高度来 透过getter和setter操作所有JavaBean的属 性。 copyProperties方法:将一个对象属性值拷 贝到另外一个对象相同属性中去。 getProperty(aaa,bbb)方法:返回一个特定 bean的特定属性值,相当于”aaa.getBbb”.
跟我学Struts框架中的标签库及应用

(3)主要的HTML标签库标签---<html:link>创建超链接 主要的优点
允许在URL中以多种方式包含请求的参数; 同时在用户关闭Cookie时,会采用URL重写把SessionID作为 请求的参数包含在URL中,用于跟踪用户的Session状态。
几个重要的属性:forward 应用实例
<html:cancel>Cancel </html:cancel>
Multibox标签
如果应用中有多个Checkbox并且希望在ActionForm Bean中用单 个数组来表示它们,就可以采用<html:multibox>
应用的实例 ActionForm中的成 员属性定义为一个数组
<html:options>
(3)主要的Bean标签库标签---用于创建Cookie的 <bean:cookie>标签
(4)主要的Bean标签库标签---<bean:message>
Struts框架对国际化的支持是使用<bean:message>标记。 该标签用于输出资源绑定文件(Resource Bundle)中的 某一条信息。 <bean:message key="userLogin.welcome" />
是一种不错的选择 但如果在页面中出现大量的Scriptlet脚本,从而使得程序 的调试和设计极其复杂。 同时Scriptlet脚本也不能重用,这常常导致开发者不得不 在JSP页面之间进行复制-粘贴操作,进而导致同一段代码 出现在多个不同的页面中。
2、在Struts中提供了如下几类的标签库
Bean标签库:用来在JSP页中管理bean(对象操作) 逻辑标签库:用来在JSP页中控制流程 HTML标签库:用来生成HTML标记,在表单中显示数据,使 用会话ID对URL进行编程 Tiles标签库:创建动态的页面布局 模板标记:使用动态模板构造普通格式的页
struts标签说明

常用Struts标签的使用说明Struts Html标签库1,<html:form>:生成HTML<form>元素,action属性用来指定用户提交表单后,处理用户请求的组建。
Struts 框架将参照struts配置文件来查找相应的action组建。
在struts-config.xml 文件中1,<html:form action=”user.do”> 与user.do对应得代码是:<action parameter="method" name="userForm" path="/user" scope="request" validate="false">2,<html:text/>:生成HTML<input type=”text”>标签的property属性指定字段的名字,对应ActionForm bean中的一个属性,代码如下:<html:text property=”loginName”/> 的对应的userForm bean属性private String login_Name;public String getLogin_Name() {return login_Name;}public void setLogin_Name(String login_Name) {this.login_Name = login_Name;}3,<html:radio/>:生成HTML<input type=”radio”>标签,使用方法与<html:text>相同。
<html:radio property=”isActive” value=”1”>启用</html:radio><html:radio property=”isActive” value=”0”>停用</html:radio>4,<html:select/>:生成HTML<select>标签。
Struts1之HTML标签库详解

Struts1之HTML标签库详解12010-05-09 15:19Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。
标签的公共特征使用固定属性名称的Struts 标签:Struts 标签也支持嵌套引用,例如:虽然Struts 标签的设计原意是为了避免使用scriptlet,scriptlet的表达式还能够提供给所有的Struts 标签使用。
但请确保使用完整的表达式:Html 标签库1.<html>标签它有两个属性:locale和xhtml,两者都不是必需的。
2.说明:生成的结果取决于Struts应用程序所位于的服务器的locale。
如果你将应用程序部署到一个不同locale的服务器,你不需要改变代码,Locale会自动调整。
3.<base>标签:表示所包含页面的绝对位置。
这个标签只有内嵌在head标签中才有效。
4.<img>标签最重要的属性page:图象文件的路径,前面必须带有一个斜线。
其它属性:heignt、width、alt。
5.<link>标签6.<errors>标签:通过一个简单的<html:errors/>标签,你就可以在一个JSP页面上显示完全自定义的错误信息。
功能超强大!!说明:这个标签在Request对象的属性集合中查找reserved key。
如果它找到一个reserved key,它就假设这个key是一个String、或是一个String数组(它包含在模块的MessageResources中查找的message keys)、或是类型为org.apache.struts.action.ActionErrors的一个对象。
如果在应用程序资源中存在相应的信息,那么就可以用下面这些可选的message keys:· errors.header or errors.prefix:相应的信息在错误信息的单独列表前显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struts框架bean,html,logic标签手册目录:bean:cookiebean:definebean:headerbean:includebean:messagebean:pagebean:parameterbean:resourcebean:sizebean:strutsbean:writehtml:basehtml:cancelhtml:selecthtml:checkboxhtml:radiohtml:multiboxhtml:linkhtml:errorshtml:javascripthtml:xhtmllogic:iteratelogic:presentlogic:messagesPresentlogic:emptylogic:matchlogic:equallogic:forward正文:Struts是Apache Jakarta的一个著名的开源项目,目标是为构建基于Java的web应用程序提供一个框架。
Struts提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:∙Bean Tags:该标签库包含的标签可以用来创建bean、访问bean和访问bean的属性。
同时提供了依据cookies、headers和parameters的值创建相关bean的能力。
∙HTML Tags:该标签库包含的标签可以用来创建Struts输入表单。
∙Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。
∙Nested Tags:该标签库建立在前三个标签库的基础上,具有前三个标签库的所有功能,只是允许标签间的嵌套。
∙Tiles Tags:该标签库包含的标签可以用来创建tiles样式的页面。
这篇指南主要介绍前三个标签库中的标签。
如果您对后两类标签也感兴趣可以查阅参考资料中的Struts的用户指南。
bean:cookiecookie最早是由Netscape公司提出来的,用来存储客户的少量状态信息。
如果您对cookie的具体细节感兴趣可以查阅参考资料中的cookie spec。
bean:cookie标签取回请求中名称为name的cookie的值。
如果没有指定multiple属性则依据刚取回的值创建一个Cookie类型的bean。
如果指定了multiple属性则依据刚取回的值创建一个Cookie[]类型的数组。
然后用id属性值将Cookie或Cookie[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。
下面的代码片段示例了如何使用bean:cookie标签读取名为JSESSIONID的cookie的值,并且使用了两种方式进行了输出:<logic:present cookie="JSESSIONID"><bean:cookie id="jSession" name="JSESSIONID"/><!-- 其它标签通过绑定到page作用域中的属性使用该值 -->这个cookie的名称是<bean:write name="jSession" property="name"/>,值为<bean:write name="jSession" property="value"/>。
<br/><!-- JSP脚本通过scripting变量使用该值 --><%String name = jSession.getName();String value = jSession.getValue();out.println("这个cookie的名称是"+name+",值为"+value+"。
<br/>");%></logic:present>bean:definebean:define标签在toScope(如果没有指定值就使用page作用域)指定的作用域中创建一个新属性,同时创建一个scripting变量。
我们可以通过id值使用它们。
新创建的属性可以由其它标签使用,而新创建的scripting变量可以由JSP 脚本使用。
我们可以使用三种方式为新创建的属性和scripting变量赋值:∙通过该标签的name、property和scope取回值,并且保持类型的一致性,除非取回的值为Java的原始类型,这时会使用适合的包装器类对这些值进行包装。
∙通过该标签的value指定值,这时新创建的属性和scripting变量的类型为ng.String。
∙通过在该标签的体中嵌入值,这时新创建的属性和scripting变量的类型为ng.String。
下面的代码片段示例了如何使用bean:define标签创建新属性values和新scripting变量values,它将listForm中persons的值取出来赋给values:<bean:define id="values" name="listForm" property = "persons"type="java.util.List"/>下面给出ListForm的代码片段以帮助您更好的理解,其中Person是一个只有id和name两个属性的简单bean:public class ListForm extends ActionForm {private List<Person> persons = null;public List<Person> getPersons() {return persons;}public void setPersons(List<Person> persons) {this.persons = persons;}public void reset(ActionMapping mapping,HttpServletRequest request) {persons = null;}}下面的代码片段示例了logic:iterate标签如何使用bean:define标签创建的新属性values:<logic:iterate id="person" name="values"><bean:write name="person" property="id"/><br/></logic:iterate>下面的代码片段示例了JSP脚本如何使用bean:define标签创建的新scripting 变量values:<%Person p = new Person();for(int i=0;i<values.size();i++){p = (Person)values.get(i);out.println(p.getId());out.println("<br/>");}%>bean:headerbean:header标签取回请求中名称为name的header的值。
如果没有指定multiple属性则依据刚取回的值创建一个String类型的bean。
如果指定了multiple属性则依据刚取回的值创建一个String[]类型的数组。
然后用id属性值将String或String[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。
下面是我的浏览器发送的header的内容,这些内容和浏览器有关,因此您的浏览器发送的内容可能和下面列出的不同。
不过这没有关系,因为要理解bean:header标签您只要对这些内容有一个大概的认识就足够了。
accept: */*accept-language: zh-cnaccept-encoding: gzip, deflateuser-agent: Mozilla/4.0 (compatible; MSIE 6.0; //应该在同一行Windows NT 5.1; SV1; .NET CLR 1.1.4322)host: localhost:8080connection: Keep-Alive下面的代码片段示例了如何使用bean:header标签读取名为User-Agent的header的值,并且使用了两种方式进行了输出:<logic:present header="User-Agent"><!-- 其它标签通过绑定到page作用域中的属性使用该值 -->您的浏览器是<bean:header id="userAgent" name="User-Agent"/><bean:write name="userAgent"/>。
<br/><!-- JSP脚本通过scripting变量使用该值 --><%out.println("您的浏览器是"+userAgent+"。
<br/>");%></logic:present>bean:includebean:include标签对指定url(由forward、href或page确定)处的资源做一个请求,将响应数据作为一个String类型的bean绑定到page作用域,同时创建一个scripting变量。
我们可以通过id值访问它们。
下面的代码片段示例了bean:include标签的用法,其中include.txt文件包含要include的内容,然后将这些内容输出:<bean:include id="value" page="/include.txt"/><!-- 其它标签通过绑定到page作用域中的属性使用该值 --><bean:write name="value"/><br/><!-- JSP脚本通过scripting变量使用该值 --><%out.println(value);%>bean:messagebean:message标签用来从指定的locale中取回国际化的消息并输出,在这个过程中我们还可以传递五个以内的参数。