action类如下:public class AddAction extends ActionSupport{
private double a;
private double b;
private double sum;
public double getA(){return a;}
public void setA(double a){this.a=a;}
public double getB(){return b;}
public void setB(double b){this.b=b;}
public double getSum(){return sum;}
public void setSum(double b){this.sum=sum;}
public String execute() throws Exception{
sum=a+b;
return "success";
}
}
jsp如下:
<form action="add.action" method="post">
第一个数字:<input type="text" name="a"/><br/>
第二个数字:<input type="text" name="b"/><br/>
<input type="submit" value="加"/>
</form>
问题1:值栈中的值,所谓的对象是指action类对象,还是什么?对于这个有很多种说法,有的人叫里面的值为属性,有的叫对象如果通过OGNL的[N]语法,如何定位到某一对象或者所谓属性?问题2:值栈中的值是存了action所有接受的参数,但是是否存储了action类里面自定义的属性?如果以上代码的sum我不写get和set方法,那么我将无法在另外一个jsp中从值栈中获得sum的值。为什么会这样?问题3:我通过如下方法都可以获得参数的值:(前提是sum有get和set方法)
使用变量名称a:<s:property value="a"></s:property>
使用变量get方法B<s:property value="getB()"></s:property>
使用变量名称sum:<s:property value="sum"/>
使用$getsum:${sum}
使用$geta:${a}
在学习struts ognl的时候,$符号并没有涉及get值栈里面值的作用,这个$符号应该不是OGNL的语法吧?
例外,如果写成${getA()},这样无法获得值,将会报错。问题比较多,但真心想求得真相!
private double a;
private double b;
private double sum;
public double getA(){return a;}
public void setA(double a){this.a=a;}
public double getB(){return b;}
public void setB(double b){this.b=b;}
public double getSum(){return sum;}
public void setSum(double b){this.sum=sum;}
public String execute() throws Exception{
sum=a+b;
return "success";
}
}
jsp如下:
<form action="add.action" method="post">
第一个数字:<input type="text" name="a"/><br/>
第二个数字:<input type="text" name="b"/><br/>
<input type="submit" value="加"/>
</form>
问题1:值栈中的值,所谓的对象是指action类对象,还是什么?对于这个有很多种说法,有的人叫里面的值为属性,有的叫对象如果通过OGNL的[N]语法,如何定位到某一对象或者所谓属性?问题2:值栈中的值是存了action所有接受的参数,但是是否存储了action类里面自定义的属性?如果以上代码的sum我不写get和set方法,那么我将无法在另外一个jsp中从值栈中获得sum的值。为什么会这样?问题3:我通过如下方法都可以获得参数的值:(前提是sum有get和set方法)
使用变量名称a:<s:property value="a"></s:property>
使用变量get方法B<s:property value="getB()"></s:property>
使用变量名称sum:<s:property value="sum"/>
使用$getsum:${sum}
使用$geta:${a}
在学习struts ognl的时候,$符号并没有涉及get值栈里面值的作用,这个$符号应该不是OGNL的语法吧?
例外,如果写成${getA()},这样无法获得值,将会报错。问题比较多,但真心想求得真相!
你在页面里加标签 <s:debug></s:debug>看里面堆栈的内容。这里里面的东西如果有那是可以直接使用的。
http://apps.hi.baidu.com/share/detail/31941919
在struts2里面,只有%{}语法,表示解析里面的数据,里面可以调用方法
<s:property 里面的数据可以是属性, 也可以调用方法,默认是调用当前最top的对象的数据。
在结果页面加上<s:debug></s:debug>
可以看得到值栈
上半部份可以直接用OGNL表达式取得
下半部份加上#
2,和第一个问题是关联的,存的是你的action对象,对象当然所定义的属性,而你不写setXXX和getXXX方法,你提交的
属性怎么被set(设置)进去,而得到时也是掉用的getXXX方法,没有set值,get的只有空或报错了.
3,${}el(Express Language)表达式,1中提到的
我的学习建议
1,先学el表达式-->自定义标签
2,查看ongl.jar的源码