struts2在配置文件与JSP中用OGNL获取Action属性
参考:Struts与OGNL结合
struts2在配置文件中可以调用Action的属性,在JSP页面也可以取出Action的属性值(前提是属性有get,set方法)。
第一个例子:
1.Action中
//文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return downloadFileName; }
2.配置文件中filename="${downloadFileName}"调用Action中的属性
<!-- 文件Excel模板下载 --> <action name="exportWebExcel" class="Action.Excel.ExportWebExcel"> <result type="stream"> <!-- 其他的参数在类中设置或者使用默认 --> <param name="contentType">application/octet-stream</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> <param name="bufferSize">8192</param> </result> </action>
第二个例子:
Action
package Demo1; import javax.print.attribute.standard.RequestingUserName; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import utils.CheckCookie; /** * Demo1主页,访问主页要先验证cookie * * @author: qlq * @date : 2017年8月29日下午12:02:31 */ public class Demo1Action extends ActionSupport { private String gotoUrl; public String getGotoUrl() { return gotoUrl; } public void setGotoUrl(String gotoUrl) { this.gotoUrl = gotoUrl; } @Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); if (CheckCookie.checkCookie(request)) return SUCCESS; // 登陆失败后将gotoUrl写到JSP页面 gotoUrl = "/demo1/main.action"; return LOGIN; } }
配置文件中:
<package name="sso" namespace="/sso" extends="struts-default"> <action name="login" class="SSOAction.LoginAction"> <result name="success" type="redirect">${gotoUrl}</result> </action> </package>
例子3: JSP页面中取出Action属性
属性有get,set方法即可,在JSP页面中也可以用OGNL表达式取出属性值,struts会将当前Action对象的属性放入值栈。
package Demo2; import javax.print.attribute.standard.RequestingUserName; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; import utils.CheckCookie; /** * Demo2主页,访问主页要先验证cookie * * @author: qlq * @date : 2017年8月29日下午12:02:31 */ public class Demo2Action extends ActionSupport { private String gotoUrl; public String getGotoUrl() { return gotoUrl; } public void setGotoUrl(String gotoUrl) { this.gotoUrl = gotoUrl; } @Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); if (CheckCookie.checkCookie(request)) return SUCCESS; // 登陆失败后将gotoUrl写到JSP页面 gotoUrl = "/demo2/main.action"; return LOGIN; } }
-------------struts只写get方法,不写属性名字用${属性名}也会调用get方法-------------------
struts只写一个get方法,不写属性名,也可以获取到get方法返回的值,由此可见${name}是调用getName()方法。
例一:
类中只有getTest方法:
package cn.xm.exam.action.exam.exam; /** * 增加考试Action * * @author QiaoLiQiang * @time 2017年10月14日下午4:55:27 */ @Controller @Scope("prototype") @SuppressWarnings("all") public class Test2Action extends ActionSupport { public String getTest() { return "这个是只有get方法"; } @Override public String execute() throws Exception { return super.execute(); } }
配置文件:
<action name="test" class="test2Action">
<result name="success" type="json">
<param name="root">test</param>
</result>
</action>
测试:
例子二:
将上面类进行改造:
package cn.xm.exam.action.exam.exam; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; /** * 增加考试Action * * @author QiaoLiQiang * @time 2017年10月14日下午4:55:27 */ @Controller @Scope("prototype") @SuppressWarnings("all") public class Test2Action extends ActionSupport { private String test = "sssssss"; public String getTest() { return "这个是只有get方法"; } @Override public String execute() throws Exception { return super.execute(); } public void setTest(String test) { this.test = test; } }
结果:
总结:
当我们在struts配置文件或者JSP页面中调用${name}的时候实际是调用getName()方法,因此有时候只需要写getName方法而不用写私有属性与set方法也可以完成获取。
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】