Strust2关于jsp页面中的属性值怎么封装成类传入action中?

问题描述

我用的是在Struts2中在jsp页通过struts2特殊标签讲对应的属性值封装成类传入action中,可是总是报空指针异常;目前所包含的条件有:1、实体类:其中包括了实体对象的各种set和get方法;2、实体映射文件:<hibernate-mapping><classname="com.rzq.bean.Userinfo"table="userinfo"catalog="rzq_3aweb"><idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass="increment"></generator></id><propertyname="userId"type="java.lang.Integer"><columnname="userId"><comment>用户名</comment></column></property><propertyname="userName"type="java.lang.String"><columnname="userName"><comment>用户姓名</comment></column></property><propertyname="userPassword"type="java.lang.String"><columnname="userPassword"><comment>用户密码</comment></column></property><propertyname="userSex"type="java.lang.Integer"><columnname="userSex"><comment>用户性别</comment></column></property><many-to-onename="groupinfo"class="com.rzq.bean.Groupinfo"fetch="select"><columnname="groupId"><comment>组织机构ID</comment></column></many-to-one></class></hibernate-mapping>

3:action类:其中也定义了实体对象的set个get方法;publicclassSaveUserinfoActionextendsActionSupport{privateUserinfouserinfo;privateUserinfoServiceservice;publicUserinfogetUser(){returnuserinfo;}publicvoidsetUser(Userinfouserinfo){this.userinfo=userinfo;}publicUserinfoServicegetService(){returnservice;}publicvoidsetService(UserinfoServiceservice){this.service=service;}publicStringexecute()throwsException{this.service.save(this.userinfo);returnSUCCESS;}@Override@SuppressWarnings("unchecked")publicvoidvalidate(){Mapmap=this.getFieldErrors();Setset=map.keySet();for(Iteratoriter=set.iterator();iter.hasNext();){System.out.println(map.get(iter.next()));}}}

4:jsp页面<s:formaction="saveUserinfo"><s:textfieldname="userinfo.userId"label="用户名"value="2"></s:textfield><s:textfieldname="userinfo.userName"label="姓名"value="赵峥"></s:textfield><s:textfieldname="userinfo.userPassword"label="密码"value="123456"></s:textfield><s:textfieldname="userinfo.userSex"label="性别"value="1"></s:textfield><s:textfieldname="userinfo.group.groupId"label="部门"value="1"></s:textfield><s:submit></s:submit></s:form>

按道理说jsp页面中userinfo.userId这些属性这样写应该没有问题啊?

解决方案

解决方案二:
什么空指针action对象的吗
解决方案三:
还是把你报错的页面贴上吧
解决方案四:
引用1楼dracularking的回复:

什么空指针action对象的吗

对,从jsp页面传递到action的对象是空的!
解决方案五:
引用2楼aaameimei的回复:

还是把你报错的页面贴上吧

java.lang.NullPointerExceptionatcom.rzq.service.impl.UserinfoServiceImpl.save(UserinfoServiceImpl.java:51)atcom.rzq.action.userinfo.SaveUserinfoAction.execute(SaveUserinfoAction.java:43)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atcom.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)atcom.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)atcom.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)atcom.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)atcom.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)atorg.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)atcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)atcom.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)atcom.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)atcom.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)atcom.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)atcom.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)

解决方案六:
你把jsp页面的userinfo改成user,或者把set方法改下。或者你干脆不提供set方法把属性改成public的。
解决方案七:
atcom.rzq.service.impl.UserinfoServiceImpl.save(UserinfoServiceImpl.java:51)把这代码附近贴出来看看啊
解决方案八:
你的userinfo对应的set,get方法咋不一致呢?
解决方案九:
Userinfo类中,对它所有的属性提供getset方法
解决方案十:
应该是getUserinfo()???怎么回事getUser()????
解决方案十一:
settergetter你用eclipse提供的自动生成功能就不会有错
解决方案十二:
那就是jsp页面的值没传到action去么可以在action中用打印的方法试一下看哪个值没取到一般没取到都是忘了写set,get方法
解决方案十三:
实现ModenDriven接口接收参数啊!
解决方案十四:
1检查set/get方法2注意要引用parameter拦截器(默认引入,如果在action里显示定义拦截器,必须显示引入它)
解决方案十五:
域对象的get和set生成错了,楼主或者可以用模型驱动实现。
解决方案:
你userinfo的get、set方法有问题吧
解决方案:
你action中的userinfo的setter方法是setUser你页面应该以user.userId而不是userinfo.userId;struts2是根据你的setter方法来注入对象的不是根据属性名
解决方案:
userinfo没有相应的get、set方法
解决方案:
引用16楼suciver的回复:

你action中的userinfo的setter方法是setUser你页面应该以user.userId而不是userinfo.userId;struts2是根据你的setter方法来注入对象的不是根据属性名

关键是我的表就是userinfo,我的实体类名也是Userinfo,我换成user干吗?
解决方案:
引用17楼xuxuexin1991的回复:

userinfo没有相应的get、set方法

packagecom.rzq.bean;/***Userinfoentity.**@authorMyEclipsePersistenceTools*/publicclassUserinfoimplementsjava.io.Serializable{//FieldsprivateIntegerid;privateGroupinfogroupinfo;privateIntegeruserId;privateStringuserName;privateStringuserPassword;privateIntegeruserSex;//Constructors/**defaultconstructor*/publicUserinfo(){}/**fullconstructor*/publicUserinfo(Groupinfogroupinfo,IntegeruserId,StringuserName,StringuserPassword,IntegeruserSex){this.groupinfo=groupinfo;this.userId=userId;this.userName=userName;this.userPassword=userPassword;this.userSex=userSex;}//PropertyaccessorspublicIntegergetId(){returnthis.id;}publicvoidsetId(Integerid){this.id=id;}publicGroupinfogetGroupinfo(){returnthis.groupinfo;}publicvoidsetGroupinfo(Groupinfogroupinfo){this.groupinfo=groupinfo;}publicIntegergetUserId(){returnthis.userId;}publicvoidsetUserId(IntegeruserId){this.userId=userId;}publicStringgetUserName(){returnthis.userName;}publicvoidsetUserName(StringuserName){this.userName=userName;}publicStringgetUserPassword(){returnthis.userPassword;}publicvoidsetUserPassword(StringuserPassword){this.userPassword=userPassword;}publicIntegergetUserSex(){returnthis.userSex;}publicvoidsetUserSex(IntegeruserSex){this.userSex=userSex;}}

这个就是我的userinfo实体类,get和set都有的!
解决方案:
引用15楼u011011528的回复:

你userinfo的get、set方法有问题吧

那你跟我说一下哪里有问题,我是没有看出来有问题啊!
解决方案:
你的action定义了属性privateUserinfouserinfo;那么对应的set和get方法应该是这样的:/***@returntheuserinfo*/publicStringgetUserinfo(){returnuserinfo;}/***@paramuserinfotheuserinfotoset*/publicvoidsetUserinfo(Stringuserinfo){this.userinfo=userinfo;}

楼主这个没看出来?
解决方案:
引用21楼splendid_java的回复:

你的action定义了属性privateUserinfouserinfo;那么对应的set和get方法应该是这样的:/***@returntheuserinfo*/publicStringgetUserinfo(){returnuserinfo;}/***@paramuserinfotheuserinfotoset*/publicvoidsetUserinfo(Stringuserinfo){this.userinfo=userinfo;}

楼主这个没看出来?

请把String改为Userinfo,上面是举个例子。
解决方案:
的确是getter和setter方法有问题,至少这是问题的一部分原因。lz可能改过类变量然后忘记引入getter和setter方法了
解决方案:
是哎,action中的setget方法有问题,需要重新生成下。

时间: 2025-01-20 07:46:21

Strust2关于jsp页面中的属性值怎么封装成类传入action中?的相关文章

验证码-为什么一个jsp页面获取另一个jsp页面保存的session值为空呢?

问题描述 为什么一个jsp页面获取另一个jsp页面保存的session值为空呢? 在Javaweb中,我用一个jsp页面生成一个验证码图片并用session保存图片上的数字,然后又在另一个denglu.jsp页面用标签导入该图片,可是首次打开denglu.jsp时图片上有显示数字(我在denglu.jsp我也同时输出验证码的值)我发现第一次访问时session的值为null之后在访问就是session就是记录图片上一次的值(比如刚启动服务器打开denglu.jsp,图片上的值为1234,那么se

js获取页面引用的css样式表中的属性值方法(推荐)_javascript技巧

如下所示: function getStyle(node, property){ if (node.style[property]) { return node.style[property]; } else if (node.currentStyle) { return node.currentStyle[property]; } else if (document.defaultView && document.defaultView.getComputedStyle) { var s

如何取出list里面的对象的多个属性值,并放在表格的td中

问题描述 如何取出list里面的对象的多个属性值,并放在表格的td中 解决方案 使用JSTL表达式<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 因为是list集合,所有需要用进行循环,具体如下. 一,导包(MyEclipse内置函数包) <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix=

javaweb-我想从后台返回给一个jsp页面同时把一个值给这个返回的页面该怎么写?

问题描述 我想从后台返回给一个jsp页面同时把一个值给这个返回的页面该怎么写? 主要是不明白后台的控制函数的返回类型该怎么写,还有就是如何把参数给那个jsp.

gradle打包android程序时,如何修改java文件中的属性值

问题描述 gradle打包android程序时,如何修改java文件中的属性值 工程有个文件例如1.java文件:其中有个public final static String URL = "/www.baidu.com"; 现在的问题是如何在用gradle打包的时候可以更换1.java文件中的URL? ant打包就可以写不同的build.xml,在build.xml中更换URL的字符串,在利用ant构建的时候通过编译不同的build.xml来达到更换URL的目的. 现在不知道gradl

java-后台获取input标签中的属性值,该怎么获取

问题描述 后台获取input标签中的属性值,该怎么获取 后台想通过JAVA获取到input中的isDraft的值是否为0 该怎么获取 <input type="button" value="创建问卷" name="sendBtn" id="sendBtn" class="butn" isDraft=0>; <input type="button" value="

jQuery获取样式中的属性值/颜色值

 代码如下 复制代码 $.fn.getHexBackgroundColor = function() {     var rgb = $(this).css('background-color');     rgb = rgb.match(/^rgb((d+),s*(d+),s*(d+))$/);     function hex(x) {return ("0" + parseInt(x).toString(16)).slice(-2);}     return rgb= "

js数组-JS在jsp页面将ajax传递的数组解析成前台数组

问题描述 JS在jsp页面将ajax传递的数组解析成前台数组 通过ajax在后台获取这样的字符串: [['技术评审1','专家2','供应商3','评分4','1'], ['技术评审2','专家2','供应商3','总分4','2'], ['技术评审3','专家2','供应商3','评分4','3']]; 传递到前台,可是默认前台识别的是字符串.怎么将其变成数字呢?达到这样的效果: var datas = [ ['技术评审1','专家2','供应商3','评分4','1'], ['技术评审2',

python字典的格式化字符串中如果键值是个整数,格式化字符串中的括号内容怎么写?

问题描述 python字典的格式化字符串中如果键值是个整数,格式化字符串中的括号内容怎么写? 比如: test={'3':'hello', 3:99} "%(3)s" % test #输出的是'hello' 那我怎么格式化输出99呢? 解决方案 对于你这种方式,dict只支持字符串形式的key,对于int类型,你可以直接取取 "%d" % test[3] 解决方案二: 字典的格式化字符串字典:格式化字符串python字典的格式化字符串