刚接触struts没多久,就遇到了这么一个问题。。大家都知道在不用struts时,servlet要忘jsp上传值,就要request.setAttrute("","");需要什么值就传什么值,
而在struts中,jsp得到action中属性的值就不用传递,直接在页面用struts标签或EL表达式就能得到action中属性(即定义的javabean)的值,在这里就存在这么一个问题了。action是不是自动把action类中所有属性的值都封装到了request中,不然怎么jsp中怎么能去到所有属性的值呢,但如果是这样,假如在action定义了很多属性,当每次跳转页面的时候都要把这么多属性放进request中,而且有些值并不是我们所需要的,这样岂不是很浪费内存,很影响效率,
难道EL,或struts标签有智能的去action中取值的能力,显然这也是不怎么合理的,如果EL有这样自动取值的能力在servlet中我们就不用向request中放值了我实在不知道struts到底用到什么方式把值发到页面的,如果是第一种把所有值一起发到jsp中,浪费资源,影响效率,struts作为一个相当成熟的框架,不认为他的开发者没有考虑到这个问题,或是解决这个问题。。但假如是第二种情况显然又是存在矛盾的。。
我不知道有没有第三种情况,或针对此处问题的解决方法,请大侠给予指导。。
而在struts中,jsp得到action中属性的值就不用传递,直接在页面用struts标签或EL表达式就能得到action中属性(即定义的javabean)的值,在这里就存在这么一个问题了。action是不是自动把action类中所有属性的值都封装到了request中,不然怎么jsp中怎么能去到所有属性的值呢,但如果是这样,假如在action定义了很多属性,当每次跳转页面的时候都要把这么多属性放进request中,而且有些值并不是我们所需要的,这样岂不是很浪费内存,很影响效率,
难道EL,或struts标签有智能的去action中取值的能力,显然这也是不怎么合理的,如果EL有这样自动取值的能力在servlet中我们就不用向request中放值了我实在不知道struts到底用到什么方式把值发到页面的,如果是第一种把所有值一起发到jsp中,浪费资源,影响效率,struts作为一个相当成熟的框架,不认为他的开发者没有考虑到这个问题,或是解决这个问题。。但假如是第二种情况显然又是存在矛盾的。。
我不知道有没有第三种情况,或针对此处问题的解决方法,请大侠给予指导。。
楼主试试在struts1中不把任何东西手动存进session和request,el还能取到值么?
但是却 不把它用在jsp 中这有何必呢-0-如果你说的那些取到Action 里用做计算的值你没有 get set 方法 不用 get的话 也不会传到页面去吧而且 客户端发送请求 在服务器执行请求后 才把得到的需要的值 以HTML 方式传给客户的
所得到的 都是必须的静态数据 没用到的 不会传递 不会浪费资源吧
而不是说 ACTION 去发给 JSP 数据了
所以的计算都是服务器本身在做请求里GET了什么 就返回值给HTML 然后传给客户 哈哈我也是新手 不过大概是这样的 应该是不会占用资源- -
先取得action中的路径值,根据路径值到struts-config.xml中取出相应的action-Mapping标签,创建actionMapping对象,后再根据里面的name属性找到相应form-bean标签,创建actionForm对象,接着进行数据的收集,valid方法的校验,之后才是真正的调用action中的execute方法,最后返回一个actionForward对象,进行页面的转向。doget方法执行完后也表示这次的请求结束了。而里面的actionForm和action都是在request范围中,当然也可以设置成session
是struts2
struts2已经把要传递的值封装好了,他貌似会把action类中已有属性的值都装进去既然在页面上能得到
action中所有属性的值,我像action是把所有值都传到jsp中了,但我们有时候不需要那写值,他总是传递不就浪费资源了吗
你是说action只会传递从当前request中得到的值吗??。。有点意思,有道理啊
你说的应该是action的设计的问题,这个会注意的,但我想了解action的传值方式
//这是action类
public class TestAction {
private String username;
private String password;
private String sex;
public String execute(){
sex="FFFFFF";
return "success";
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
//掉用action的页面 test.jsp
<s:form name="testform" method = "post" action = "TestAction">
<s:textfield name="username" ></s:textfield>
<s:password name="password"></s:password>
<s:submit value="ok"></s:submit>
//struts.xml配置
<action name="TestAction" class="com.action.TestAction">
<result >usershow.jsp</result>
</action>//最终显示页面 ---都能显示
姓名:${requestScope.username }
密码:${requestScope.password }
性别:${requestScope.sex }证明:action最终只是把当前request中得到的值封装并传递到下一个页面 这是不对的结果: 我更迷茫了。。找大侠求解