Struts

1//导包 2//配置WEB.XML 3    <filter> 4        <filter-name>struts2</filter-name> 5        <filter-class>org.apache.struts2.dispatcher.ng.filter 6        .StrutsPrepareAndExecuteFilter</filter-class> 7    </filter> 8 9    <filter-mapping> 10        <filter-name>struts2</filter-name> 11        <url-pattern>/*</url-pattern>             */ 12    </filter-mapping> 13//加入struts.xml到src下 14    <struts> 15        //配置扩展名 16        <constant name="struts.action.extension" value="do"></constant> 17            //package:struts2使用package来组织模块 18            //name属性:必须,用于其他的包引用当前包,一定要与项目名一致 19            //extends:继承,可以继承所有的配置,通常继承struts-default 20            //namespace:可选,若定义了,必须把namespace加进url 21            //http://localhost:8080/contextPath/namespace/actionName.action                         22        <package name="helloWorld" extends="struts-default"> 23            <action name="product-input"> 24                <result>/WEB-INF/pages/input.jsp</result> 25            </action>      26            //class是实体类,默认值是:com.opensymphony.xwork2.ActionSupport, 27            //method为调用的方法,默认值execute() ,返回值为SUCCESS 28            //result返回结果 29            <action name="product-save" class="com.gmy.entiy.Product" method="save"> 30                //type是类型 dispatcher转发 redirect重定向 redirectAction重定向到一个 31                //Action chain转发到一个Action 默认值是dispatcher 32                <result name="details" type="dispatcher">/WEB-INF/pages/details.jsp</result> 33                //重定向到Action 34            <result name="index" type="redirectAction"> 35                <param name="actionName">testAction</param> 36                <param name="namespace">/gmy</param> 37            </result> 38            //redirect重定向可以  但是chain转发不可以 通过这种方式 39            <result name="index" type="redirect">/gmy/testAction.do</result> 40            </action>     41        </package> 42        <package name="helloWorld" extends="struts-default" namespace="/gmy"> 43            <action name="testAction"> 44                <result>/WEB-INF/pages/input.jsp</result> 45            </action> 46        </package> 47    </struts> 48     49     50     51//表单页面 52    //input中的name属性一定要和实体类中的变量对应 53    <form action="product-save.action" method="post"> 54        ProductId:<input type="text" name="productName"> 55        <br><br> 56        ProductDesc:<input type="text" name="productDesc"> 57        <br><br> 58        ProductPrice:<input type="text" name="productPrice"> 59        <br><br> 60        <input type="submit" value="提交"> 61    </form> 62//实体类‘ 63    public class Product { 64        private Integer productId;//变量一定要和name属性对应 65        private String productName; 66        private String productDesc; 67        private double productPrice; 68        //geter、seter方法 69        //必须要一个空参数构造器,供反射用 70    } 71     72//Servlet API解耦方式     73    //ActionContext 74            //上下文对象 75            ActionContext context = ActionContext.getContext(); 76            //application 77            Map<String, Object> application = context.getApplication(); 78            application.put("applicationString", "applicationString"); 79            //session 80            Map<String, Object> session = context.getSession(); 81            session.put("sessionString", "sessionString"); 82            //request 83            Map<String, Object> request = (Map<String, Object>) context.get("request"); 84            request.put("requestString", "requestString"); 85            //parameters取不到值 86            //parameters只能读不能写 87            Map<String, Object> parameters = context.getParameters(); 88            parameters.put("parametersString", "parametersString"); 89            System.out.println(((String[])parameters.get("name"))[0]); 90            System.out.println(((String[])parameters.get("sex"))[0]); 91         92    //实现XXXAware接口     93            private Map<String, Object> application; 94            private Map<String, Object> session; 95            private Map<String, String[]> parameters; 96            private Map<String, Object> request; 97 98            public String tests(){ 99                application.put("applicationString", "application1"); 100                session.put("sessionString", "session"); 101                //不能设值 102                parameters.put("parametersString", new String[]{"gmy1","gmy2"}); 103                request.put("requestString", "request"); 104                System.out.println(((String[])parameters.get("name"))[0]); 105                return "success"; 106            } 107            @Override 108            public void setApplication(Map<String, Object> application) { 109                this.application = application; 110            } 111            @Override 112            public void setParameters(Map<String, String[]> parameters) { 113                this.parameters = parameters; 114            } 115            @Override 116            public void setRequest(Map<String, Object> request) { 117                this.request = request; 118            } 119            @Override 120            public void setSession(Map<String, Object> session) { 121                this.session = session; 122            } 123 124//Servlet API耦合方式         125    //使用ServletAcionContext 126        HttpServletRequest request = ServletActionContext.getRequest(); 127        HttpSession session = request.getSession(); 128        ServletContext servletContext = ServletActionContext.getServletContext(); 129     130    //实现ServletXXXAware接口 131        private HttpServletResponse response; 132        private ServletContext context; 133        private HttpServletRequest request; 134        public String tests(){ 135            return "success"; 136        } 137        @Override 138        public void setServletResponse(HttpServletResponse response) { 139            this.response = response; 140        } 141        @Override 142        public void setServletContext(ServletContext context) { 143            this.context = context; 144        } 145        @Override 146        public void setServletRequest(HttpServletRequest request) { 147            this.request = request; 148        } 149 150//值栈 151    //${}取得是值栈中的内容,并不是request中的 152    //两个逻辑部分 153        //Map栈:实际上是OgnlContext类型,是个Map,也是ActionContext的引用, 154        //里面保存各种Map:requestMap,sessionMap,applicationMap,parametersMap,attr 155            //读取:可以使${requestScope.对象.属性},也可以通过<s:property  156            //value="#request.对象.属性"> 157        //对象栈:实际上是CompoundRoot类型,是一个使用ArrayList定义的栈, 158        //里边保存各种和当前Action示例相关的对象,是一个数据结构意义的栈 159            //读取:可以用${name},也可以用<s:property value="[0].name">从栈里面第几个开始读 160 161//调用public类的静态字段默认是true例如<s:property value="@java.lang.Math@PI">, 162//调用public静态方法默认是false,必须配置<s:property value="@java.lang.Math@cos(0)"> 163//使用对象栈方法为属性赋值<s:property value="调用seter方法"> 164 165//异常 166    <global-results> 167        <result name="input"></result> 168    </global-results> 169    <global-exception-mappings> 170        <exception-mapping result="input" exception="java.lang.ArithmeticException"> 171        </exception-mapping> 172    </global-exception-mappings> 173 174//对于Map栈,打印request,session,application,parameters的某个属性值或某个请求参数 175    <s:property value="#session.date"> 176    <s:property value="#parameters.date[0]"> 177     178//创建一个URL字符串 179    <s:url value"/getProduct" var="url"> 180        <s:param name="productId" value="2002"></s:param> 181    </s:url> 182     183    //取值栈中的属性,对于value值自动ognl解析,若不进行,用单引号 184    <s:url value"/getProduct" var="url"> 185        <s:param name="productId" value="productId"></s:param> 186    </s:url> 187     188//set标签:在request,session,application,page域加入属性值 189<s:set name="productName" value="productName" scope="request"></s:set> 190productName:${requestScope.productName} 191 192//push标签:把对象在标签开始后压入到值栈中,在标签结束时,弹出值栈 193    <s:push value="#request.person"> 194        ${name}//这里取值有效 195    </s:push> 196    ${name}//这里取值无效 197 198//if,else标签,可以直接是使用值栈中的属性 199    <s:if test="productPrice > 1000"> 200        I7处理器 201    </s:if> 202    <s:elseif test="productPrice >800"> 203        I5处理器 204    </s:elseif> 205    <s:else> 206        I3处理器 207    </s:else> 208 209//iterator标签:遍历集合,把集合的每个元素放到栈顶 210    <s:iterator value="#request.person"> 211        ${name}-${age}//取得到 212    </s:iterator> 213    ${name}-${age}//取不到 214 215//sort标签:可以对集合元素进行排序 216    <s:srot comparator="#request.comparator" source="persons" var="persons2"></s:sort> 217 218//date标签:可以对Date对象进行排版 219    <s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2"/> 220    date:${date2} 221 222//a:标签:用%{}都属性进行强制ognl解析 223    <s:a href="getPerson.action?name=%{name}">${}</s:a> 224 225//表单标签:可以自动回显  226    <s:form action="save"> 227        <s:hidden name=""></s:hidden> 228        <s:textfield name="userName" label="UserName"></s:textfield> 229        <s:password name="password" label="Password"></s:password> 230        <s:textarea name="desc" label="Desc"></s:textarea> 231        <s:submit></s:submit> 232    </s:form> 233 234//checkbox标签: 235    <s:checkbox name="married" label="Married"></s:checkbox> 236 237//radio标签:使用#{}创建Map 238    <s:radio name="gender" list="#{'1':'Male','0':'Female'}" label="Gender"></s:radio> 239 240//checkboxlist标签: 241    <s:checkboxlist list="#request.cities" listKey="cityId" listValue="cityName"  242    label="City" name="city"></s:checkboxlist> 243 244//select标签:使用{}创建LIST 245    <s:select list="{11,12,13,14,15,16,17,18,19,20}" headerKey="" headerValue="请选择"  246    label="Age" name="age"> 247        <s:optgroup label="21-30" list="#{21:21}"></s:optgroup> 248        <s:optgroup label="31-40" list="#{31:31}"></s:optgroup> 249    </s:select> 250     251//theme属性 252        //可以在标签中增加theme属性 253        //在request.setAttribute("theme","simple"); 254        //可以改成全局的在struts.xml 默认是xhtml  <constant name="struts.ui.theme" 255         value="simple"></constant> 256     257     258//例 259        //加入Jar包 260        //配置web.xml 261             <filter> 262                <filter-name>struts2</filter-name> 263                <filter-class>org.apache.struts2.dispatcher.ng.filter 264                .StrutsPrepareAndExecuteFilter</filter-class> 265            </filter> 266 267            <filter-mapping> 268                <filter-name>struts2</filter-name> 269                <url-pattern>/*</url-pattern>*/ 270            </filter-mapping> 271        //配置struts.xml 272        <struts> 273            //配置扩展名 274            <constant name="struts.action.extension" value="do,"></constant> 275            <package name="s2-5" extends="struts-default"> 276                //自定义拦截器栈 277                <interceptors> 278                    <interceptor-stack name="gmy"> 279                        <interceptor-ref name="paramsPrepareParamsStack"> 280                            <param name="prepare.alwaysInvokePrepare">false</param> 281                        </interceptor-ref> 282                    </interceptor-stack> 283                </interceptors> 284          285                <default-interceptor-ref name="gmy"/> 286                 287                <action name="emp-*" class="com.gmy.app.EmployeeAction" method="{1}"> 288                    <result name="{1}">emp-{1}.jsp</result> 289                    <result type="redirectAction">emp-list</result> 290                </action>      291            </package> 292        </struts> 293         294        //EmployeeAction 295        public class EmployeeAction implements RequestAware,ModelDriven<Employee>, 296        Preparable{ 297            private Dao dao = new Dao(); 298            private Employee emp; 299            public String update(){ 300                dao.update(emp); 301                return "success"; 302            } 303            public void prepareUpdate(){ 304                emp = new Employee(); 305            } 306            public String edit(){ 307                return "edit"; 308            } 309            public void prepareEdit(){ 310                emp = dao.get(empId); 311            } 312            public String save(){ 313                dao.save(emp); 314                return "success"; 315            } 316            public void prepareSave(){ 317                emp = new Employee(); 318            } 319            public String delete(){ 320                dao.delete(empId); 321                return "success"; 322            } 323            public String list(){ 324                arg0.put("emps", dao.getEmployees()); 325                return "list"; 326            } 327            private Integer empId; 328            public void setEmpId(Integer empId) { 329                this.empId = empId; 330            } 331            private Map<String, Object> arg0; 332            @Override 333            public void setRequest(Map<String, Object> arg0) { 334                this.arg0 = arg0; 335            } 336            @Override 337            public Employee getModel() { 338                if(empId == null) 339                    emp = new Employee(); 340                else 341                    emp = dao.get(empId); 342                return emp; 343            } 344            @Override 345            public void prepare() throws Exception { 346                System.out.println("prepare..."); 347            } 348        } 349         350        //Dao 351        public class Dao { 352            private static Map<Integer, Employee> emps =  353            new LinkedHashMap<Integer, Employee>(); 354            static{ 355                emps.put(1001, new Employee(1001, "AA", "AA", "AA@gmy.com")); 356                emps.put(1002, new Employee(1002, "BB", "BB", "BB@gmy.com")); 357                emps.put(1003, new Employee(1003, "CC", "CC", "CC@gmy.com")); 358                emps.put(1004, new Employee(1004, "DD", "DD", "DD@gmy.com")); 359                emps.put(1005, new Employee(1005, "DD", "DD", "DD@gmy.com")); 360                emps.put(1006, new Employee(1006, "EE", "EE", "EE@gmy.com")); 361                emps.put(1007, new Employee(1007, "FF", "FF", "FF@gmy.com")); 362                emps.put(1008, new Employee(1008, "GG", "GG", "GG@gmy.com")); 363                emps.put(1009, new Employee(1009, "HH", "HH", "HH@gmy.com")); 364                emps.put(10010, new Employee(10010, "II", "II", "II@gmy.com")); 365            } 366            public List<Employee> getEmployees(){ 367                return new ArrayList<Employee>(emps.values()); 368            } 369            public void delete(Integer empId){ 370                emps.remove(empId); 371            } 372            public void save(Employee emp){ 373                emp.setEmpId((int)System.currentTimeMillis()); 374                emps.put(emp.getEmpId(), emp); 375            } 376            public Employee get(Integer empId){ 377                 return emps.get(empId); 378            } 379            public void update(Employee emp){ 380                emps.put(emp.getEmpId(), emp); 381            } 382        } 383         384        //Employee 385        public class Employee { 386            private Integer empId; 387            private String firstName; 388            private String lastName; 389            private String email; 390            public Integer getEmpId() { 391                return empId; 392            } 393            public void setEmpId(Integer empId) { 394                this.empId = empId; 395            } 396            public String getFirstName() { 397                return firstName; 398            } 399            public void setFirstName(String firstName) { 400                this.firstName = firstName; 401            } 402            public String getLastName() { 403                return lastName; 404            } 405            public void setLastName(String lastName) { 406                this.lastName = lastName; 407            } 408            public String getEmail() { 409                return email; 410            } 411            public void setEmail(String email) { 412                this.email = email; 413            } 414            public Employee(Integer empId, String firstName, String lastName, 415                    String email) { 416                super(); 417                this.empId = empId; 418                this.firstName = firstName; 419                this.lastName = lastName; 420                this.email = email; 421            } 422            public Employee() { 423                // TODO Auto-generated constructor stub 424            } 425        } 426             427        //index.jsp 428        <body> 429        <a href="emp-list.do">Emp List</a> 430        </body>         431                     432        //emp-list.jsp 433        <body> 434        <!--  435            private Integer empId; 436            private String firstName; 437            private String lastName; 438            private String email; 439         --> 440        <s:debug></s:debug> 441            <s:form action="emp-save.do"> 442                <s:textfield name="firstName" label="FirstName"></s:textfield> 443                <s:textfield name="lastName" label="LastName"></s:textfield> 444                <s:textfield name="email" label="Email"></s:textfield> 445                <s:submit></s:submit> 446            </s:form> 447        <br><br> 448            <table cellpadding="10" cellspacing="0" border="1"> 449                <thead> 450                    <tr> 451                        <td>ID</td> 452                        <td>FirstName</td> 453                        <td>LastName</td> 454                        <td>Email</td> 455                        <td>Edit</td> 456                        <td>Delete</td> 457                    </tr> 458                </thead> 459                <tbody> 460                    <s:iterator value="#request.emps"> 461                        <tr> 462                            <td>${empId}</td> 463                            <td>${firstName}</td> 464                            <td>${lastName}</td> 465                            <td>${email}</td> 466                            <td><a href="emp-edit.do?empId=${ empId}">Edit</a></td> 467                            <td><a href="emp-delete.do?empId=${ empId}">Delete</a></td> 468                        </tr> 469                    </s:iterator> 470                </tbody> 471            </table> 472        </body>     473             474        //emp-edit.jsp 475        <body> 476            <s:form action="emp-update.do"> 477                <s:hidden name="empId" ></s:hidden> 478                <s:textfield name="firstName" label="FirstName"></s:textfield> 479                <s:textfield name="lastName" label="LastName"></s:textfield> 480                <s:textfield name="email" label="Email"></s:textfield> 481                <s:submit></s:submit> 482            </s:form> 483        </body>         484             485//错误消息显示 486        //1、继承ActionSupport 487        //2、配置<result name="input">标签 488        //3、在Action所在包内创建properties文件,例如UserAction.java,UserAction 489        //.properties,UserAction.properties增加内容invalid.fieldvalue.age=... 490        //可以通过debug标签看值栈中的属性 ,${fieldErrors.age[0]} 491        //也可以通过标签<s:fielderror filedName="age"></s:fielderror> 492                //提出ul li span,在src下,新建template.simple包,在新建fielderror.ftl文件 493                <#if fieldErrors??><#t/> 494                    <#assign eKeys = fieldErrors.keySet()><#t/> 495                    <#assign eKeysSize = eKeys.size()><#t/> 496                    <#assign doneStartUlTag=false><#t/> 497                    <#assign doneEndUlTag=false><#t/> 498                    <#assign haveMatchedErrorField=false><#t/> 499                    <#if (fieldErrorFieldNames?size > 0) ><#t/> 500                        <#list fieldErrorFieldNames as fieldErrorFieldName><#t/> 501                            <#list eKeys as eKey><#t/> 502                                <#if (eKey = fieldErrorFieldName)><#t/> 503                                    <#assign haveMatchedErrorField=true><#t/> 504                                    <#assign eValue = fieldErrors[fieldErrorFieldName]><#t/> 505                                    <#if (haveMatchedErrorField && (!doneStartUlTag))><#t/>             506                                        <#assign doneStartUlTag=true><#t/> 507                                    </#if><#t/> 508                                    <#list eValue as eEachValue><#t/> 509                                        <#if parameters.escape>${eEachValue!?html}<#else>${eEachValue!}</#if> 510                                    </#list><#t/> 511                                </#if><#t/> 512                            </#list><#t/> 513                        </#list><#t/> 514                        <#if (haveMatchedErrorField && (!doneEndUlTag))><#t/>                         515                            <#assign doneEndUlTag=true><#t/> 516                        </#if><#t/> 517                        <#else><#t/> 518                        <#if (eKeysSize > 0)><#t/> 519                            <#list eKeys as eKey><#t/> 520                                <#assign eValue = fieldErrors[eKey]><#t/> 521                                <#list eValue as eEachValue><#t/> 522                                    <#if parameters.escape>${eEachValue!?html} 523                                    <#else>${eEachValue!}</#if> 524                                </#list><#t/> 525                            </#list><#t/> 526                        </#if><#t/> 527                    </#if><#t/> 528                </#if><#t/> 529 530//自定义转换器             531                 532                 533                 534//国际化 535    //在struts.xml文件中加入<constant name="struts.custom.i18n.resources" 536    // value="i18n"></constant> 537    //在src下新建i18n_en_US.properties和i18n_zh_CN.properties文件 538    //在标签中不使用label标签,而使用key标签,label中要使用的必须label="%{getText('submit')}" 539             540//通过超链接来切换语言 541    <a href="testI18n.action?request_locale=en_US">English</a>         542    <a href="testI18n.action?request_locale=zh_CN">中文</a>             543             544//验证文件 545    //1、将struts-2.3.20\apps\struts2-blank\WEB-INF\classes\example下 546    //的Login-validation.xml复制到Action所在包下 547    //把Login的名字改为当前Action的名字 548    <field name="age"> 549        <field-validator type="int"> 550            <param name="min">20</param> 551            <param name="max">50</param> 552            <message key="">..${min}.${max}...</message>//也是使用国际化 553        </field-validator> 554    </field>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )