ognl表达式注入(js可以通过OGNL表达式从struts的值栈中取值吗)

本文目录
js可以通过OGNL表达式从struts的值栈中取值吗
是可以实现的,具体如下:
值栈中存放着一些OGNL可以访问的数据,如下:
a:action的实例,这样就可以通过OGNL来访问Action实例中的属性的值了。
b:OGNL表达式运算的值,可以设置到值栈中,可主动访问值栈对象,强行设置。
c:OGNL表达式产生的中间变量,比如使用Struts2标签的时候,使用循环标签,自然会有循环的变量,这些都放在值栈中。
例子,修改用户输入的参数信息,如下图所示,
图:用户输入了aa的username
图:用户提交后发现username属性的值发生了变化
实现:
首先定义一个实现PreResultListener接口的类:MyPreResultListener
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;
public class MyPreResultListener implements PreResultListener {
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
System.out.println("现在处理Result执行前的功能, result=" + resultCode);
//在Result处理之前修改value stack里面的username对应的值
invocation.getInvocationContext().getValueStack().setValue("username", "被修改了");
}
}
然后在相应的Action中进行注册:
import com.capinfotech.listener.MyPreResultListener;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class PreResultAction extends ActionSupport {
private String username;
private String password;
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 execute() {
System.out.println("用户输入的参数为,username:" + username + ", password:" + password);
ActionContext context = ActionContext.getContext();
MyPreResultListener preListener = new MyPreResultListener();
context.getActionInvocation().addPreResultListener(preListener);
return "success";
}
}
ognl表达式中%的作用
在struts2字符串中用%{}指出,其内部是一个ognl表达式,需要解析。
如《s:textfield lable="user" name="user" value="%{#session.user}" /》
不过有些标签默认认定,整个字符串就是一个表达式,所以不用%{}
如《s:property value="#session.user" /》
在非struts2标签中,是不能用%{}的,可以用以下方法
《input name="user" value="${session.user}" /》,这是el表达式。
《input name="user" value="《s:property value=’#session.user’ /》" /》,这是struts2表达式嵌套用法。
但是注意,不能在struts2标签中的字符串中,再次嵌套struts2标签。
如《s:textfield lable="user" name="user" value="《s:property value=’#session.user’ /》" /》
也不能在struts2标签中用el表达式,
如《s:textfield lable="user" name="user" value="${session.user}" /》

更多文章:
gridview排序功能属性(怎么把datagridview中的自动排序功能禁用)
2025年6月15日 08:45
易语言主程序和dll通讯(C+的dll如何用易语言正确调用)
2026年4月8日 14:30
怎么制作网站ping工具(ping是什么 如何ping一个站点)
2026年4月7日 09:15
前端样式网站(前端开发应该知道的几个CSS网页表单布局技巧)
2026年2月10日 21:15
flash模板照片幻灯片放映按钮代码解释?如何使用C#操作幻灯片
2025年7月24日 18:45
delphi bit定义(delphi中如何定义TBitmap类型的变量)
2025年11月14日 19:00
bankstatement中文(bank statement是什么意思)
2026年4月5日 01:45
linux如何编程(linux编程开发如何实现对智能手机的开发)
2025年12月23日 13:00
compareto方法实现(java中compareto实现学生成绩排列)
2026年4月28日 01:00
win8如何重装系统(怎么重新安装win8系统|win8如何重新安装系统)
2026年5月29日 06:45














