Struts2 中 OGNL 如何更简单的访问静态变量和静态方法

在 struts2 标签中是使用 OGNL 来访问对象属性或方法的,也就是访问的 ValueStack 中的值,即 OgnlValueStack。OGNL 也能让你直接访问类的静态变量和静态方法,标准写法是:

@类全限定名@静态属性或方法名,比如访问某个常量:

<s:property value="@cc.unmi.common.Constants@MY_NAME"/>

<s:property value="@cc.unmi.common.Utils.now()"/>

麻烦就是一定要写上类的全限定名称,实际应用时肯定比这个还要长,所以必须寻求一种更精练的写法。幸好像这篇文章:Struts2 OGNL 的增强 提到了可以用: 阅读全文 >>

引入了 struts2-spring-plugins 包后 Spring 就会管理你的 Action

Struts2 与 Spring 结合,使用 Spring 来管理 Action 实例,在项目中引入了struts2-spring-plugin-2.2.1.jar 包。然后想到的是既然是要用 Spring 来管理 Action 实例,就得在 struts.xml 里加上:

或者是在 struts.properties 里加上一条属性:

OK,这也没问题,然而有次在某个测试项目中想暂时不用 Spring 来管理 Bean,于是把上面的配置去了,也把 web.xml 中的相关 Spring 的 ContextLoaderListener 也格啦。容器启动的时候却发现: 阅读全文 >>

理解和灵活应用 Struts2 的文件下载功能

文件下载给我们最直接的概念就是,给个文件链接点击就下载。似乎太简单,然而 Struts2 却把它作为一个独立的学问来对待,理由有四:

1. 文件名为中文时,直接点击下载,链接可能会走样(某些浏览器,URL 编码的问题),致使无法下载。
2. 不总是从下载实际的文件,文件内容有时候是动态生成的,如数据库中的内容。
3. 对于知名的文件类型不让浏览器直接打开,而是出现下载对话框保存文件。例如,要下载的文件是 .txt 的,可能直接就在浏览器中显示其内容。
4. 需要授权才能下载文件时

当然对于以上若干问题,Servlet/JSP 都能通过正确的 URL 编码,响应头设置、权限代码控制解决,只是 Struts2 让我们处理起来更方便了,内部原理自然是一样的。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十七)

当个人在撒谎时尚有害臊与尺度;而在代表着某一群体利益时,因其无具体担责人,故能弥天却不知廉耻,瞒得了众人吗?非也,只因暂无处述说罢。

Struts2 action 的 ;jsessionid=xxx 使找不到页面 Bug 的解决

在 Websphere Application Server(WAS,我用的还是 WAS 5.1,所以用的 Struts2 也是 j4 版,恐怕很难再找到像我这样在 JDK 1.4/Servlet 2.3/JSP 1.2 下用 Struts2 的了) 部署的第一个 Struts2 的应用没有出什么问题。可是在另一个 WAS 下部署的 Struts2 应用却有些问题(说明:Struts2 的版本都是 struts-2.0.11.1),所有用了 <s:url url=…/> 或 <s:form action=…/> 来生成的 URL 都带了个 ;jsessionid=xxx,如:

<script src="/unmi/js/sys_cal.js;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm">

<img src="/unmi/images/img_btn.gif;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm"/>

<a href="https://yanbin.blog/unmi/storeSubinvRelate!toUpdate.action;jsessionid=0001bosAgxaO_kxlHCbjS1AMxTu:11mijgptm?model.id=162"> 阅读全文 >>

Struts2 的 struts.xml 配置中 namespace 的使用

Struts2 的 struts.xml 中是分 package 配置的,可以为 package 设置 namespace 属性,如

<package namespace="/secure"   ....>
    ......
</package>

如果没有指定 namespace 属性,默认 namespace 是 ""。使用 namespace 可以方便于按不同目的规划对应用的访问规则。比如不同 namespace 下配置了不同的拦截器就可以实现权限的控制,如 "/secure" 下已登陆用户才能访问,"/public" 下可公开访问的。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十四)

生活中常为一些无伤大体之事优柔寡断,譬如买羽毛球拍是方头的还是圆头的呢?电子产品是这款好还是那款好呢?拿此又放下,举彼又放下,最后靠概率来决定。取其一,少段时间内总有些戚戚然,而后全然无所谓。小事无碍,大事可就会后悔不及,无疑亦会让许多机会径直溜去。

1. 从此开始学习 Struts2 对 Ajax 的支持。这也是 Struts2 新注入的元素。Struts2 的 Ajax 支持是建立在 Dojo 和 DWR 基础之上的。提供了 Ajax 的输入检验,表单提交;pub-sub 事件模型、自动完成以及与 JSON 的使用等功能。

2. 在 Struts2.0.6 和 Struts2.0.11 的 apps/struts-showcase-2.x.x.war 中的 dwr 包都还是 dwr-1.1-beta-3.jar,当前 DWR 最新版是 2.0,前一个稳定版是 1.1.4,所以正式应用可用 1.1.4 版,若用 2.0 DWR 需做充分的测试。Struts2 的 Ajax 支持是建立在 ajax 主题上的,ajax 是扩展了 xhtml 主题。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十三)

柏杨在形容中国人不团结,喜欢窝里斗用了这样的话:每一个中国人都是一条龙,但是三个中国人加在一起──三条龙加在一起,就成了一条猪、一条虫,甚至连虫都不如--《丑陋的中国人》。可是他老人家走得走,要是能多有半个月的阳寿,不知作有何感想。

1. <s:optiontransferselect.../> 正是考虑到通常使用而新加的用于创建两个下拉框,可以来回移动列表项。有属性设置是否显示 "选定左移"、"全部左移"、"选定右移"、"全部右移" 按钮以及各按钮上的文本,其他的 list/listKey/listValue/doubleList/doubleKey/doubleValue 等属性同 <s:doubleselect.../> 的是一样的。还可设置 allowUpDownOnLeft/allowUpDownOnRight 是否出现相应框的上下移动选择的按钮(true/false)。

2. <s:radio.../> 的用法与 <s:checkboxlist.../> 完全一样,只页面表现不一样,一个多选,一个单选。 阅读全文 >>

手工处理 Struts2 框架上传的文件

在使用了 Struts2 框架的系统中,对于处理像下面这种表单上传文件时:

自然而然的想法就是在 Action 中声明变量 File upload 和 String desc,请求提交到这个 Action 后,在 execute() 方法中就能直接使用 upload 和 desc 了,它们已被 Struts2 框架(org.apache.struts2.interceptor.FileUploadInterceptor 监听器) 赋上了相应的值了。 阅读全文 >>

Unmi 的 Struts2 学习笔记(十二)

上有所好,下必甚之。君不见屠宰场的墙头“以三个代表指导我们的屠宰工作!” 发挥到极致;近来更是“和谐”泛滥,褒贬难分,诸如“创建人水和谐” 等比比皆是。程序开发更需要务实,任凭天花乱坠都糊弄不了梗直的机器。

1. 初见 Struts2 的表单标签有 tooltip 以及 tooltipConfig 下的 tooltipBgColor 等属性,有一种砰然心动的感,本能的以为例如一个输入框,鼠标悬停其中便出现一个 JS Tip 层,还可控制这个层的样式。用了才知道头脑其实有点过热,不过是在输入框前加下图标,鼠标要放在那个图标上才显示 tooltip 指定的内容,而且如果不给 form 加上 tooltipConfig="#{'jsTooltipEnabled':'true'}",也就用 alt/title 来实现,没什么新意。加了tooltipConfig="#{'jsTooltipEnabled':'true'}" 的话还要人命的是 JS 提示层会出来,alt/title 也会迸出来,产生重叠。同时还必须加上 <s:head/> 否则出现 dojo 的错误,即使 jsTooltipEnabled 为 false 亦如此,没来由。 阅读全文 >>