List<String>-----底层就是数组,所以用数组也可以表示:String[]
Struts2数据自动类型转换、封装。
Core核心
每个Struts2标签自成一行,在table下可省略tr,前提是不禁止struts2标签的默认格式生效。
Struts2默认是Post请求。
解决Struts2中文乱码问题:
1.解决Post请求中文乱码:配置Struts2.xml文件。
<constant name="struts.i18n.encoding" value="GBK"></constant> <!-- 解决Post请求中文乱码 -->
2.解决Get请求中文乱码:
步骤1:,然后后退到E:\Program Files (x86)\MyEclipse\apache-tomcat-6.0.33\conf下:打开server文件:
修改为:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="GBK"/>
让Struts2的样式失效:配置Struts2.xml文件:
<constant name="struts.ui.theme" value="simple"></constant>
以下是Struts2标签的演示代码:
一、index.jsp:
<%@ page language="java" import="java.util.*,com.zuxia.yc42.po.*" pageEncoding="GBK"%> <%@ taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; Map<Integer,String> map = new HashMap<Integer,String>(); //HashMap造数据1 map.put(0,"重庆"); map.put(1,"广东"); map.put(2,"深圳"); map.put(3,"成都"); map.put(4,"北京"); map.put(5,"上海"); request.setAttribute("map",map); List<UserInfo> list = new ArrayList<UserInfo>(); //ArrayList造数据2 UserInfo userInfo1 = new UserInfo(); userInfo1.setUsId(1); userInfo1.setUsName("小强"); userInfo1.setUsAge(18); userInfo1.setUsSex("男"); UserInfo userInfo2 = new UserInfo(); userInfo2.setUsId(2); userInfo2.setUsName("小离"); userInfo2.setUsAge(25); userInfo2.setUsSex("女"); list.add(userInfo1); list.add(userInfo2); request.setAttribute("users",list); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>'Struts2Taglib.jsp'标签的学习</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"> --> <style type="text/css"> .fieldStyle { height: 100px; } </style> </head> <body> <!-- EL表达式:${scope.key} ${requestScope.map} OGNL表达:#key / #scope.key #request.map #userInfo.usName #userInfo['usName'] --> <s:form action="initTest" method="get" namespace="/userManager"> <table border="1" width="90%" align="center"> <s:textfield name="usName" id="usName" cssStyle="width:200px;" cssClass="fieldStyle" label="用户名" ></s:textfield> <s:password name="usPass" id="usPass" label="密码"></s:password> <s:radio list="#{0:'男',1:'女'}" name="usSex" id="usSex" ></s:radio> <s:checkboxlist list="#request.map" name="usAH"></s:checkboxlist> <s:select list="#request.map" name="usJg"></s:select> <s:textfield name="usAge" id="usAge"label="年龄" ></s:textfield> <s:submit value="提交"></s:submit> <s:reset value="重置"></s:reset> </table> </s:form> <form action="myAction"> <s:debug></s:debug> <table> <tr> <th>序号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> <!-- JSTL + EL STRUTS2 + OGNL --> <s:iterator value="#attr.users" var="userInfo" status="status"> <!--迭代数据 :#attr.users可以等价于#request.users --> <tr> <td> <s:property value="#status.index"/> </td> <td> <s:property value="#userInfo.usName"/> </td> <td> <s:property value="#userInfo.usAge"/> </td> <td> <s:if test="usSex == 0"> 男 </s:if> <s:else> 女 </s:else> </td> </tr> </s:iterator> </table> <input type="submit" value="登陆" /> </form> </body> </html>
二、MyTestAction extends ActionSupport类:
package com.zuxia.yc42.action; import java.util.List; import java.util.Set; import com.opensymphony.xwork2.ActionSupport; import com.zuxia.yc42.po.UserInfo; public class MyTestAction extends ActionSupport { //问题1、没有给成员属性编写get/Set方法 private UserInfo usInfo1; //问题2、返回值不是String private String usName; private String usPass; private String usSex; private Set<String> usAH; private String usJg; private Integer usAge; public String init() { System.out.println("INIT方法被调用成功"); //System.out.println(usInfo1.getUsName()); return "action"; } public String query() { System.out.println("query方法被调用成功"); //System.out.println(usInfo1.getUsName()); return "OK"; } /** * 默认方法 */ public String execute() { System.out.println("**************************"); return "OK"; } public String save_init() { System.out.println("--------------------"); return "errors"; } public UserInfo getUsInfo() { return usInfo1; } public void setUsInfo(UserInfo usInfo1) { this.usInfo1 = usInfo1; } public String getUsName() { return usName; } public void setUsName(String usName) { this.usName = usName; } public String getUsPass() { return usPass; } public void setUsPass(String usPass) { this.usPass = usPass; } public String getUsSex() { return usSex; } public void setUsSex(String usSex) { this.usSex = usSex; } public UserInfo getUsInfo1() { return usInfo1; } public void setUsInfo1(UserInfo usInfo1) { this.usInfo1 = usInfo1; } public Integer getUsAge() { return usAge; } public void setUsAge(Integer usAge) { this.usAge = usAge; } public Set<String> getUsAH() { return usAH; } public void setUsAH(Set<String> usAH) { this.usAH = usAH; } public String getUsJg() { return usJg; } public void setUsJg(String usJg) { this.usJg = usJg; } }
三、struts.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" > <struts> <!-- 常量配置 --> <!-- 定义字符集编码 --> <constant name="struts.i18n.encoding" value="GBK"></constant> <!-- 解决Post请求中文乱码 --> <!-- 禁止struts2标签的默认格式生效 <constant name="struts.ui.theme" value="simple"></constant>--> <package name="testManager" extends="struts-default" namespace="/userManager"> <!-- 请求找不到Action时 默认调用该Action --> <default-action-ref name="defaultAction"></default-action-ref> <!-- 全局的返回路径 --> <global-results> <result name="errors">/error.jsp</result> </global-results> <action name="testAction" class="com.zuxia.yc42.action.MyTestAction" method="init"> <result name="OK">/MyJsp.jsp</result> <result name="error">/index.jsp</result> </action> <action name="myAction" class="com.zuxia.yc42.action.MyTestAction" method="query"> <result name="OK" >/MyJsp1.jsp</result> <result name="error">/index.jsp</result> </action> <action name="myTestAction" class="com.zuxia.yc42.action.MyTestAction"> <result name="OK">/MyJsp1.jsp</result> <result name="error">/index.jsp</result> </action> <action name="*Test" class="com.zuxia.yc42.action.MyTestAction" method="{1}"> <result name="OK">/MyJsp1.jsp</result> <result name="error">/index.jsp</result> <result name="action" type="chain"> <param name="namespace">/userManager</param> <param name="actionName">usManager</param> <param name="method">modifyInfo</param> </result> </action> <action name="usManager" class="com.zuxia.yc42.action.UserManagerAction" > <result name="success">/jsp/userManager/regUserInfo.jsp</result> </action> <action name="defaultAction"> <result>/error.jsp</result> </action> </package> <package name="testManager1" extends="struts-default" namespace="/testManager"> <action name="testAction" class="com.zuxia.yc42.action.MyTestAction" method="init"> <result name="OK">/MyJsp.jsp</result> <result name="error">/index.jsp</result> </action> <action name="myAction" class="com.zuxia.yc42.action.MyTestAction" method="query"> <result name="OK" >/MyJsp1.jsp</result> <result name="error">/index.jsp</result> </action> <action name="myTestAction" class="com.zuxia.yc42.action.MyTestAction"> <result name="OK">/MyJsp1.jsp</result> <result name="error">/index.jsp</result> </action> <action name="usManager" class="com.zuxia.yc42.action.UserManagerAction" > <result name="success">/jsp/userManager/regUserInfo.jsp</result> </action> </package> </struts>
![]()