struts和hibernate整合做的一个用户管理中出现的一个问题!更新用户时遇到的! indexForm中有内容吗?如果能正常提交,应该有内容。没有的话,可能是form的问题,你把form的代码,还有struts-config.xml都帖出来。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请问你的IndexForm中有没有相应的字段定义?还有页面最好吧logic写道form中 struts-config.xml代码如下:谢谢两位了! <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config> <data-sources /> <form-beans > <form-bean name="indexForm" type="org.mxg.struts.form.IndexForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="indexForm" input="/add.jsp" name="indexForm" path="/index" scope="request" type="org.mxg.struts.action.IndexAction" > <forward name="ShowAll" path="/findAll.do"></forward> </action> <action attribute="indexForm" name="indexForm" path="/findAll" scope="request" type="org.mxg.struts.action.FindAllAction" > <forward name="showall" path="/ShowAll.jsp"></forward> </action> <action attribute="indexForm" name="indexForm" path="/prepareUpdate" scope="request" type="org.mxg.struts.action.PrepareUpdateAction" > <forward name="prepare" path="/prepare.jsp"></forward> </action> <action attribute="indexForm" input="/update.jsp" name="indexForm" path="/update" scope="request" type="org.mxg.struts.action.UpdateAction" > <forward name="ShowAll" path="/findAll.do"></forward> </action> </action-mappings> <message-resources parameter="org.mxg.struts.ApplicationResources" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in></struts-config> 我第一次添加用户时能够得到表单的能用!然后进行更新!从数据库读出来再更新时就得不到了!我就纳闷了!找了一下午就是空指针错误!后来经过层层围攻才找到那里没有得到更新后的数据!希望大家帮忙! indexForm.java中的内容如下:其中id是自己加的! /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */package org.mxg.struts.form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionMapping;import org.apache.struts.validator.ValidatorForm;/** * MyEclipse Struts * Creation date: 10-09-2007 * * XDoclet definition: * @struts.form name="indexForm" */public class IndexForm extends ValidatorForm { /* * Generated fields */ /** userName property */ private String userName; /** userPwd property */ private String userPwd; private Integer id; /* * Generated Methods */ public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } /** * Method validate * @param mapping * @param request * @return ActionErrors */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub return null; } /** * Method reset * @param mapping * @param request */ public void reset(ActionMapping mapping, HttpServletRequest request) { // TODO Auto-generated method stub } /** * Returns the userName. * @return String */ public String getUserName() { return userName; } /** * Set the userName. * @param userName The userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * Returns the userPwd. * @return String */ public String getUserPwd() { return userPwd; } /** * Set the userPwd. * @param userPwd The userPwd to set */ public void setUserPwd(String userPwd) { this.userPwd = userPwd; }} 根据你的Form那么你的jsp做如下修改<logic:present scope="request" name="user" > <html:form action="/update.do" onsubmit="return validateIndexForm(this)" > ID编号: <html:text name="user" property="id" / > <br/ > 用户名: <html:text name="user" property="userName" / > <br/ > 密码 : <html:text name="user" property="userPwd" / > <br / > <html:submit value="提交" / > <html:reset value="重置" / > </html:form > </logic:present > 注意大小写userName和username在提交给ActionForm的时候,是不一样的。 你有没有提供VlidatorForm的.xml文件呀.有的话检查一下里的验证~~~~~~ 可是我vo里是这么写的呀: 如果改了的话就找不到userid和username,userpwd了! package org.mxg.vo; ID编号: <html:text name="user" property="id" / > <br/ > 用户名: <html:text name="user" property="userName" / > <br/ > 密码 : <html:text name="user" property="userPwd" / > 上面红色的是不是应该和持久化类一致!不然的话应该这样一改就得不到了呀!/** * User generated by MyEclipse - Hibernate Tools */public class User implements java.io.Serializable { // Fields private Integer userid; private String username; private String userpwd; // Constructors /** default constructor */ public User() { } /** full constructor */ public User(String username, String userpwd) { this.username = username; this.userpwd = userpwd; } // Property accessors public Integer getUserid() { return this.userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getUserpwd() { return this.userpwd; } public void setUserpwd(String userpwd) { this.userpwd = userpwd; }} IndexForm :/** userName property */ private String userName; private String userPwd; private Integer id; prepare.jsp页面: ID编号: <html:text name="user" property="userid" / > <br/ > 用户名: <html:text name="user" property="username" / > <br/ > 密码 : <html:text name="user" property="userpwd" / > 如果不是这些不一致,那你去找god去吧。 可是我vo里是这么写的呀: 如果改了的话就找不到userid和username,userpwd了! package org.mxg.vo; ID编号: <html:text name="user" property="id" / > <br/ > 用户名: <html:text name="user" property="userName" / > <br/ > 密码 : <html:text name="user" property="userPwd" / > 上面红色的是不是应该和持久化类一致!不然的话应该这样一改就得不到了呀! 红色的应该和FormBean里面一样 你写的红色的应该是和持久化类一致。表单在向action传递数据时才会把数据组装到actionform中 和IndexForm 里的也要一致,你看那些自动生成的就知道了,不一致他也找不到的.就像你不用struts时,要在sevlet中获取表单提交的数据一样,怎么能不一致呢? jspd页面的属性名称和form中的属性名称不一致,action没有正确的填充form所以是空指针异常 用struts的标签真是头痛呀!我实在是不知道怎么办了!改变策略了!我用下面的代码实现了! <body> <center> <logic:present scope="request" name="user"> <html:form action="/update" onsubmit="return validateIndexForm(this)"> ID编号:<input type="text" name="id" value="${user.userid }"/> <br /> 用户名:<input type="text" name="username" value="${user.username }"/> <br /> 密码 : <input type="text" name="userpwd" value="${user.userpwd }"/> <br /> <html:submit value="提交" /> <html:reset value="重置" /> </html:form> <html:javascript formName="indexForm" /> </logic:present> </center> </body> 然后在action里用getParameter("")方法一个一个的得到的!然后再写入了数据库!更新是实现了!不过表单的验证又失效了!是不是把form写在<logic:precent>里验证就不管用了呢!有人遇到过这样的问题吗!谢谢大家的帮助! int id = indexForm.getId(); 你的这个属性名 是userid 还是 Id 欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作! 获取页面数据存放到本地数据库 模糊查询 如何让用户知道错误信息。 DNS解析问题,请帮忙,谢谢 如何编写webservice的调用文档 cookie 的使用 请教一个问题,就20分了。高手进~~~ 在jsp中调用后台程序,无错,但就是删除不了,帮忙看看。 c3po数据源配置疑问 Java的一些术语的中英文对照 请问哪位用过Dom4J 语言包,开发一个网站要求双语,如何实现语言包功能 jsp
还有页面最好吧logic写道form中
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
<data-sources />
<form-beans >
<form-bean name="indexForm" type="org.mxg.struts.form.IndexForm" /> </form-beans> <global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="indexForm"
input="/add.jsp"
name="indexForm"
path="/index"
scope="request"
type="org.mxg.struts.action.IndexAction" >
<forward name="ShowAll" path="/findAll.do"></forward>
</action>
<action
attribute="indexForm"
name="indexForm"
path="/findAll"
scope="request"
type="org.mxg.struts.action.FindAllAction" >
<forward name="showall" path="/ShowAll.jsp"></forward>
</action>
<action
attribute="indexForm"
name="indexForm"
path="/prepareUpdate"
scope="request"
type="org.mxg.struts.action.PrepareUpdateAction" >
<forward name="prepare" path="/prepare.jsp"></forward>
</action>
<action
attribute="indexForm"
input="/update.jsp"
name="indexForm"
path="/update"
scope="request"
type="org.mxg.struts.action.UpdateAction" >
<forward name="ShowAll" path="/findAll.do"></forward>
</action> </action-mappings> <message-resources parameter="org.mxg.struts.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
</struts-config>
indexForm.java中的内容如下:其中id是自己加的!
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package org.mxg.struts.form;import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;/**
* MyEclipse Struts
* Creation date: 10-09-2007
*
* XDoclet definition:
* @struts.form name="indexForm"
*/
public class IndexForm extends ValidatorForm {
/*
* Generated fields
*/ /** userName property */
private String userName; /** userPwd property */
private String userPwd;
private Integer id; /*
* Generated Methods
*/ public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} /**
* Method validate
* @param mapping
* @param request
* @return ActionErrors
*/
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
} /**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
} /**
* Returns the userName.
* @return String
*/
public String getUserName() {
return userName;
} /**
* Set the userName.
* @param userName The userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
} /**
* Returns the userPwd.
* @return String
*/
public String getUserPwd() {
return userPwd;
} /**
* Set the userPwd.
* @param userPwd The userPwd to set
*/
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
<html:form action="/update.do"
onsubmit="return validateIndexForm(this)" >
ID编号: <html:text name="user" property="id" / > <br/ >
用户名: <html:text name="user" property="userName" / >
<br/ >
密码 : <html:text name="user" property="userPwd" / >
<br / >
<html:submit value="提交" / >
<html:reset value="重置" / >
</html:form >
</logic:present >
userName和username在提交给ActionForm的时候,是不一样的。
有的话检查一下里的验证~~~~~~
如果改了的话就找不到userid和username,userpwd了!
package org.mxg.vo;
ID编号: <html:text name="user" property="id" / > <br/ >
用户名: <html:text name="user" property="userName" / >
<br/ >
密码 : <html:text name="user" property="userPwd" / >
上面红色的是不是应该和持久化类一致!不然的话应该这样一改就得不到了呀!
/**
* User generated by MyEclipse - Hibernate Tools
*/public class User implements java.io.Serializable {
// Fields private Integer userid;
private String username;
private String userpwd;
// Constructors /** default constructor */
public User() {
}
/** full constructor */
public User(String username, String userpwd) {
this.username = username;
this.userpwd = userpwd;
}
// Property accessors public Integer getUserid() {
return this.userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
} public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
} public String getUserpwd() {
return this.userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
}
/** userName property */
private String userName;
private String userPwd;
private Integer id; prepare.jsp页面:
ID编号: <html:text name="user" property="userid" / > <br/ >
用户名: <html:text name="user" property="username" / > <br/ >
密码 : <html:text name="user" property="userpwd" / >
如果不是这些不一致,那你去找god去吧。
如果改了的话就找不到userid和username,userpwd了!
package org.mxg.vo;
ID编号: <html:text name="user" property="id" / > <br/ >
用户名: <html:text name="user" property="userName" / >
<br/ >
密码 : <html:text name="user" property="userPwd" / >
上面红色的是不是应该和持久化类一致!不然的话应该这样一改就得不到了呀!
红色的应该和FormBean里面一样
要在sevlet中获取表单提交的数据一样,怎么能不一致呢?
用struts的标签真是头痛呀!我实在是不知道怎么办了!改变策略了!我用下面的代码实现了!
<body>
<center>
<logic:present scope="request" name="user">
<html:form action="/update" onsubmit="return validateIndexForm(this)">
ID编号:<input type="text" name="id" value="${user.userid }"/>
<br />
用户名:<input type="text" name="username" value="${user.username }"/>
<br />
密码 : <input type="text" name="userpwd" value="${user.userpwd }"/>
<br />
<html:submit value="提交" />
<html:reset value="重置" />
</html:form>
<html:javascript formName="indexForm" /> </logic:present>
</center>
</body>
然后在action里用getParameter("")方法一个一个的得到的!然后再写入了数据库!更新是实现了!不过表单的验证又失效了!是不是把form写在<logic:precent>里验证就不管用了呢!有人遇到过这样的问题吗!谢谢大家的帮助!
你的这个属性名 是userid 还是 Id