4个回答
2015-12-12 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
检查页面的属性名字的name是不是跟aciton中定义的一致,如果不一致action就获取不到页面的传值。
例子如下:
表单中有个属性是userId,那么在aciton中接收参数就要这么写:
private String userId;
然后写getter 和 setter 方法,这个值默认就传进去了。
值栈中的Action实例
Struts2框架总是把Action实例放在栈顶。因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略“#”标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。
Struts2中的命名对象
Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。这些命名对象都是Map类型。
parameters
用于访问请求参数。如:#parameters['id']或#parameters.id,相当于调用了HttpServletRequest对象的getParameter()方法。
注意,parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象,一量对象被创建(在调用Action实例之前就已经创建好了),它和HttpServletRequest对象就没有了任何关系。
request
用于访问请求属性。如:#request['user']或#request.user,相当于调用了HttpServletRequest对象的getAttribute()方法。
session
用于访问session属性。如:#session['user']或#session.user,相当于调用了HttpSession对象的getAttribute()方法。
application
用于访问application属性。如:#application['user']或#application.user,相当于调用了ServletContext的getAttribute()方法。
attr
如果PageContext可用,则访问PageContext,否则依次搜索request、session和application对象。
例子如下:
表单中有个属性是userId,那么在aciton中接收参数就要这么写:
private String userId;
然后写getter 和 setter 方法,这个值默认就传进去了。
值栈中的Action实例
Struts2框架总是把Action实例放在栈顶。因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略“#”标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。
Struts2中的命名对象
Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。这些命名对象都是Map类型。
parameters
用于访问请求参数。如:#parameters['id']或#parameters.id,相当于调用了HttpServletRequest对象的getParameter()方法。
注意,parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象,一量对象被创建(在调用Action实例之前就已经创建好了),它和HttpServletRequest对象就没有了任何关系。
request
用于访问请求属性。如:#request['user']或#request.user,相当于调用了HttpServletRequest对象的getAttribute()方法。
session
用于访问session属性。如:#session['user']或#session.user,相当于调用了HttpSession对象的getAttribute()方法。
application
用于访问application属性。如:#application['user']或#application.user,相当于调用了ServletContext的getAttribute()方法。
attr
如果PageContext可用,则访问PageContext,否则依次搜索request、session和application对象。
展开全部
这里要深入理解下ActionSupport类中对于对象模型的解析。
struts2的标签中的name属性值已经不是简单的属性了,而是 对象.属性,放在值栈对象中进行管理。
你的Action类中的对象叫vUser 而在<s:textfield name="user">
因为struts2对于属性赋值操作是通过IOC方式设定的
你设定的setter方法对属性进行赋值.
所以他会严格寻找对象名叫vUser的对象设定其vuUserName属性,找不到赋值失败就会为null.
而且你要是getter和setter方法命名不是按照驼峰命名法命名,还会报空指针异常(也就是首字母小写第二个单词首字母大写).
建议楼主好好看看源码,和官方的教程。
struts2的标签中的name属性值已经不是简单的属性了,而是 对象.属性,放在值栈对象中进行管理。
你的Action类中的对象叫vUser 而在<s:textfield name="user">
因为struts2对于属性赋值操作是通过IOC方式设定的
你设定的setter方法对属性进行赋值.
所以他会严格寻找对象名叫vUser的对象设定其vuUserName属性,找不到赋值失败就会为null.
而且你要是getter和setter方法命名不是按照驼峰命名法命名,还会报空指针异常(也就是首字母小写第二个单词首字母大写).
建议楼主好好看看源码,和官方的教程。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没理解Struts2传递值的机制,你想通过jsp页面传值那么你的那个页面中的user.vuUserName是根据你的实体类来写的,你这么写就意味着你必须有个实体类User.java,其中得有个属性名叫vuUserName(其中大小写也必须一致),我想你的那个所谓的VoteUser.java应该就是这个User.java类,但是这名字得一致
为什么要这样呢,?这就是Struts2的IOC机制,也就是像Spring的IOC一样,在通过Struts2提交表单数据到Action时Struts2实际上给你new了一个实体类的对象,然后通过你Action中的set方法给你这个对象赋值了,这时候就可以了,这就是为什么要一致,并且要有实体类的getset方法的原因,希望对你有帮助
为什么要这样呢,?这就是Struts2的IOC机制,也就是像Spring的IOC一样,在通过Struts2提交表单数据到Action时Struts2实际上给你new了一个实体类的对象,然后通过你Action中的set方法给你这个对象赋值了,这时候就可以了,这就是为什么要一致,并且要有实体类的getset方法的原因,希望对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
...JSP里面的名称叫user。
action里面的变量叫vUser,你叫它怎么传值进去阿 ,要保准jsp和action的名称相同阿,然后再重新生成setter和getter对象。
action里面的变量叫vUser,你叫它怎么传值进去阿 ,要保准jsp和action的名称相同阿,然后再重新生成setter和getter对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询