jsp form表单代码如下。
[quote]
<label for=""></label>
<input name="status" type="hidden" value="1" />
<input name="button" type="submit" class="sbutton" id="button" value="提交"/>
<input name="button2" type="reset" class="sbutton" id="button2" value="返回" />
</form>
</div>
[/quote]
Struts.xml的配置
[quote]
<?xml version="1.0" encoding="gbk" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="default" namespace="/" extends="struts-default">
<action name="*">
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
<action name="UserInseAction" class="com.lcsz.classmates.action.UserInfoAction">
<!-- result name="success" type="redirect">login</result-->
<result name="success" type="redirect">login</result>
<result name="input" type="redirect">UserIns</result>
</action>
</package>
[/quote]
UserInfoAction.java 代码
[quote]
package com.lcsz.classmates.action;
import com.lcsz.classmates.dao.UserDao;
import com.lcsz.classmates.dao.impl.UserDaoImpl;
import com.lcsz.classmates.pojo.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserInfoAction extends ActionSupport implements ModelDriven {
/**
* long
*/
private static final long serialVersionUID = 1L;
public User user = new User();
public String execute(){
UserDao userdao = new UserDaoImpl();
try {
if (userdao.UserIns(user)) {
return SUCCESS;
} else {
return INPUT;
}
} catch (Exception e) {
System.out.println("发现错误:"+e.getMessage());
return INPUT ;
}
}
public User getModel() {
return user;
}
}
[/quote]
在数据库中的插入记录 中文的话就是null 英文和数字可以插入进行
[b]问题补充:[/b]
[b]在Action中的值 如果是中文就是 null 如果不是中文就是就正常 :cry: [/b]
[b]问题补充:[/b]
[color=red]很郁闷的,
由于刚学Struts2 很多问题不知道是在哪产生的。
Struts.properties 中的设置如下
struts.enable.DynamicMethodInvocation = true
struts.devMode = true
struts.configuration.xml.reload =true
struts.i18n.encoding =GBK
struts.locale =zh_CN
在jsp页面中也设置 GBK [/color]
页面上的设置 和 XML上的设置 都是GBK了。
数据库也是GBK
[b]问题补充:[/b]
[color=blue]
if (userdao.UserIns([color=violet]user[/color])) {
return SUCCESS;
} else {
return INPUT;
}
[/color]
中文就为null
英文和数字就有值
[color=darkred]问题其实已经决绝了。但是我觉得决绝的不够理想[/color]
[list]
[*]1.我在程序中加了个encoding Filter
[/list]
数据库 jsp页面 Struts.xml都设置了gbk
为什么还要写Filter呢。。
[b]问题补充:[/b]
其实页面不一定要用s标签的
用一般的 form input 一样可以等到的
首先你要明确一个概念: Action封装form的字段值有两中方法:
直接采用属性封装:
Action中定义各个的属性要与对应form中的参数同名,
并提供GET/SET方法;
采用模型对象封装:
Action中只定义一个模型对象:[color=blue]public User user = new User(); [/color]并提供GET/SET方法;
form中写法为:
我猜你本义是要采用第二中方法,所以应将jsp页面的form修改为:
[color=red][size=medium][align=center][/align][/size][/color]
debug一下看看,在action里面传中文的时候到底有没有值
你调试到execute方法里时,user里保存的中文是有的还是没有的,
先定位到底是前台没传过来,还是后台插不进去
1.debug 的 action 中字段是否有值.
2.如果有值,可以数据库转换编码有问题
你要写才行
你写input肯定是Null
if (userdao.UserIns([code="java"]user[/code]))
debug 这里看这个user 的相关字段是否有值.
很郁闷的,
由于刚学Struts2 很多问题不知道是在哪产生的。
对于你的问题,建议你先下个电子书看看,或买本书来研究再说,
看看网上的例子代码,再自己编写,学起来比较快
这里超多电子书的
http://www.51leifeng.net/search.php?searchid=107&orderby=lastpost&ascdesc=desc&searchsubmit=yes
if (userdao.UserIns([color=red]user[/color]))
debug 这里看这个user 的相关字段是否有值.
用
换成
的成
public User user = new User();
中是否有 setUsername 方法 是否是string 类型
设置request 的编码啊
[color=red]Struts.[/color]properties 文件名为小写字母啦
struts.properties
:) 增加了一个过滤器,是将页面的值经过action传递到后端,之间如果存在字符集编码不一致的情况下,将自动帮你转换。像楼主说的,应该不存在。还有一个不明白之处,你的action中定义了user对象,而页面使用的只是定义了一个属性如username,Action中是否要用private String username;来接收。
首先要思路清晰,确定是前台没有传过来值,还是有值而没有插入到数据库。再看是逻辑控制问题还是编码问题。
user.username
你要写getter/setter方法
getName/setName
并且在jsp标签的name="user.username"
很简单的就解决你的问题了,我只看了一行的代码
第一种 : 使用普通表单 后面一定要加 action 这是你这个程序接收部到值的原因
如果其他地方还有错误的话 哪我就部知道了 , 我就看了者一样就肯定你这个接收不到值的错误
第二种 : 使用struts2 的标签库的话,可以省略掉后缀action
第三种 : 是在有namespace 的时候 也必须要有action的后缀 否则无效
后面代码我没看 , 看了第一行就发现错误了 ,后面的代码太多了 看的头疼
那你在里面加过滤器看一下啊!!!!!
一般这样我想都是编码问题吧!
action="UserInseAction" 修改为action="UserInseAction.action"试试!
奇怪,我这里没问题:
example/chinesechar.jsp
[code]
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
struts.xml
[code]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<package name="example" namespace="/example" extends="struts-default">
<!-- 中文字符 -->
<action name="chinese" class="example.ChineseCharAction">
<result>/example/chinesechar.jsp</result>
</action>
</package>
[/code]
example.ChineseCharAction
[code]
package example;
import org.apache.log4j.Logger;
public class ChineseCharAction extends ExampleSupport {
private static final long serialVersionUID = -990408847158885421L;
private static Logger log=Logger.getLogger(ChineseCharAction.class);
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String execute() throws Exception{
if(log.isDebugEnabled()){
log.debug(msg);
}
return SUCCESS;
}
}
[/code]
可以输出中文信息……
你jsp页面有没有这个
<%@ page contentType="text/html; charset=UTF-8" %>