struts2的 component标签(非表单标签)

来源:互联网 发布:淘宝海外版 编辑:程序博客网 时间:2024/05/16 08:09

component标签

component标签用于使用自己的自定义组件,这是一个非常灵活的用法,如果经常需要使用某个效果片段,就可以考虑将这个效果片段定义成一个自定义组件,然后在页面中使用component标签来使用该自定义组件。

因为使用自定义组件还是基于主题、模板管理的,因此在使用component标签时,常常需要指定如下三个属性

  1. theme:自定义组件所使用的主题,如果不指定该属性,默认使用xhtml主题。
  2. templateDir:指定自定义组件的主题目录,如果不指定,默认使用系统的主题目录,即template目录。
  3.  template:指定自定义组件所使用的模板。

除此之外,还可以在cmponent标签内使用param子标签,子标签表示向该标签模板中传入额外的参数。如果希望在模板中取得该参数,总是采用如下形式:$parameters.paramname,或者$parameters['paramname']。

提示:自定义的模板文件可以采用FreeMarker、JSP和Velocity三种技术来书写。


采用JSP模板的例子:

1.模板文件所在的文件目录结构:




2.  *.jsp页面的片段:

<div id="box-questions">
                <s:iterator value="paperQuestions" id="groupMap">
                         <s:iterator value="#groupMap['QUESTION_LIST']" id="qstMap">
                               <s:component templateDir="/includes" theme="custom" template="question.jsp">
                                        <s:param name="mode">exam</s:param>
                                        <s:param name="questionType" value="#qstMap['QUESTION'].questionType" />
.                                        ........................................................................
                               </s:component>
                        </s:iterator>
               </s:iterator>

</div>


3.  模板页面:

question.jsp(整体结构完整,无其他标签体)

<%@ page language="java" pageEncoding="UTF-8"%>
       <%@ taglib uri="/struts-tags" prefix="s"%>
        <s:if test="parameters.questionType == @cn.epis.ets.pojo.Question@QT_SINGLE_SELECT">
                <s:component templateDir="/includes" theme="custom" template="single_select.jsp">
                     <s:param name="mode" value="parameters.mode" />
                       .......................................................................................
              </s:component>
          </s:if>
         <s:elseif test="parameters.questionType == @cn.epis.ets.pojo.Question@QT_MULTI_SELECT">

<!--templateDir路径加个template目录就是multi_select.jsp的 路径-->
                   <s:component templateDir="/includes" theme="custom" template="multi_select.jsp">
                   <s:param name="mode" value="parameters.mode" />
..................................................................................................
                  </s:component>
          </s:elseif>











0 0