Struts2 的 <s:component> 中如何加条件参数 <s:param>...

Struts2 的 <s:component> 标签可以让你消磨掉自定义标签的意愿,它可以指定一个模板文件,我比校亲赖于 ftl 文件,然后用 <s:param> 给上参数,其他的事情交给 freemarker 去处理了,而且在 ftl 文件能够直接以 <@s.textfield ..../> 的形式使用 Struts2 的标签。

比如,jsp 文件里这么使用 <s:component> 标签:

<s:component template="/components/status.ftl" theme="simple">
    <s:param name="status" value="#status"/>
</s:component>

把 status.ftl 要放在 WEB-INF/classes/template/simple/components/status.ftl。当然你可以应用 <s:component> 的 templateDir 属性使 status.ftl 放在别的位置上,但可能会带来别的麻烦。

然后在 status.ftl 文件里用 <#if parameters.status??>...... 判断参数,进而随意发挥 FreeMarker 和 Struts2 标签的功能了。

有时候多个 jsp 页面要共用同一个 ftl 文件时,某些时候要向 ftl 模板传入某个参数,其他时候不需要。一种本能的写法就是给其中的 <s:param> 用 <s:if> 框起来,像:

可是走不通,在 ftl 里怎么都感觉不到 link 参数的存在,解决办法是让 <s:if> 作 <s:param> 的儿子,写成:

这样在 ftl 文件里的:

上面那段代码就会在条件不成立时同样是不会有任何输出,达到正常思维下的 <s:if> 包裹 <s:param> 的效果。

类别: Struts. 标签: . 阅读(1,399). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar