js可以通过OGNL表达式从struts的值栈中取值吗?

我想在jsp页面上直接将从数据库查到的值传给echarts可以做到吗?... 我想在jsp页面上直接将从数据库查到的值传给echarts可以做到吗? 展开
 我来答
xiangjuan314
2016-03-09 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2905万
展开全部

是可以实现的,具体如下:

值栈中存放着一些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";

}

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式