zoukankan      html  css  js  c++  java
  • Struct2 向Action中传递参数(中文乱码问题)

    就是把视图上的值传递到Action定义的方法中

    也就是把数据从前台传递到后台

    三种方式:

    • 1.  使用action属性接收参数

        比如jsp页面:

    <body>
          使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a>
        
    </body>

    对应的struct.xml

    <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
                <result>/user_add_success.jsp</result>
    </action>

    那么在UserAction类中,要定义两个属性(与url中的参数一样)

           必须有两个特别重要的方法(getXX和setXX,这个XX一定要与url中的参数一致)

    • 2.使用DomainModel (域模型,项目中真正存在的实体概念)

    就是说如果传递过来的参数特别多,那么可以把这些参数顶一个成一个域模型

    比如先定义一个Person类,里面有一些属性,然后再定义

    <body> 
    使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a>
        
    </body>

    这里面Struct自动实现了User类的new操作以及get和set的调用

    不用太纠结这个赋值过程是怎么样的,这些都是struct背后的机制,这样设置之后,就可以在类中得到两个属性的值

    但是有一种情况,比如说注册的时候,会有一个确认密码的字段,要传到后台,但是在我们定义的DomainModel 里是不会有这个字段的。

    就是

    当从前段传递过来的字段与一个DomainModel 不匹配时,

    使用DTO(数据传输对象)

    在上例中,就是UserDTO类,包含传递过来的所有字段,接收数据之后,再create一个user类出来,然后存到数据库中。

    简单说,DTO就是一个接收数据并传递的过程

    • 3.用ModelDriven接收参数(模型驱动)

         很少用,但是包含一个很重要的思想

         当struct接收到一个请求或者模型之后,这个请求过程往往是交给后面的模型处理,而不会自己处理 -- MVC 

    其中像UserAction一样各种各样的Action都是 C

    像其中 定义的 User 是M

    像add方法返回值 是  C

    <body> 
        使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>
        
    </body>

    ModelDriven使得它认为定义的User是一个类

    它里面有一个方法 getModel 

    如果传递参数有中文怎么办?

    <body>
    使用action属性接收参数,测试中文问题
    <form action="user/user!add" method="post">
          姓名:<input type="text" name="name"></input>
          <input type="submit" value="submit"/>
    </form>    
    </body>

    解决办法:

    Struct加 上constant常量配置

    同时说明一下constant的所有配置都在哪里可以找得到

    1. 去官网查文档

    2. 所有的配置都在这里

    可以看到这一行

    ### This can be used to set your default locale and encoding scheme
    # struts.locale=en_US
    struts.i18n.encoding=UTF-8

    也就是structs默认是UTF-8;

    我们要把它改成GBK即可

     

  • 相关阅读:
    架构-缓存
    工具-Memcahce和Redis比较
    职业-把工作当作职业 or 事业?
    MySQL-查询结果缓存
    MySQL-SQL语句中SELECT语句的执行顺序
    getXXXPos()约定
    FBX BlendShape/Morph动画解析
    quick cocos2dx 3.x 配置win32工程
    cocos2dx 3.x fullPathForFilename及isFileExist在ios/mac下与win32下行为不同
    osX显示隐藏文件
  • 原文地址:https://www.cnblogs.com/tech-bird/p/4145371.html
Copyright © 2011-2022 走看看