Struts 2与AJAX(第二部分)(五)

42 篇文章 0 订阅
自定义<s:tree />的AJAX的主题(theme)

Struts 2的标志过人之外在于它允许开发人员自定义标志的页面输出。要做到这一点,你所需要做的只是创建一个自定义的theme并将其应用到相应标志。下面就让我自定义一个真正的AJAX的<s:tree/>的theme。

首先,你的源文件的根目录下新建包“template.realajax”。

然后,在上一步所建的包中新建“tree.ftl”文件,内容如下:

<script type="text/javascript">
/* <![CDATA[ */
     dojo.require("dojo.lang.*");
     dojo.require("dojo.widget.*");
     dojo.require("dojo.widget.Tree");
     dojo.require("dojo.widget.TreeRPCController");    <#-- Added by Max -->            
/* ]]> */
</script>    
<#-- Added by Max -->             
<div dojoType="TreeRPCController" 
      widgetId="${parameters.id?html}_controller"
      DNDcontroller="create" 
      RPCUrl="<@s.url />">
</div>
<#-- End -->    
<div dojoType="Tree"   
     <#if parameters.blankIconSrc?exists>
     gridIconSrcT="<@s.url value='${parameters.blankIconSrc}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcL?exists>
     gridIconSrcL="<@s.url value='${parameters.gridIconSrcL}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcV?exists>
     gridIconSrcV="<@s.url value='${parameters.gridIconSrcV}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcP?exists>
     gridIconSrcP="<@s.url value='${parameters.gridIconSrcP}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcC?exists>
     gridIconSrcC="<@s.url value='${parameters.gridIconSrcC}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcX?exists>
     gridIconSrcX="<@s.url value='${parameters.gridIconSrcX}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcY?exists>
     gridIconSrcY="<@s.url value='${parameters.gridIconSrcY}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.gridIconSrcZ?exists>
     gridIconSrcZ="<@s.url value='${parameters.gridIconSrcZ}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.expandIconSrcPlus?exists>
     expandIconSrcPlus="<@s.url value='${parameters.expandIconSrcPlus}' includeParams='none'/>"
    </#if>
    <#if parameters.expandIconSrcMinus?exists>
     expandIconSrcMinus="<@s.url value='${parameters.expandIconSrcMinus?html}' includeParams='none'/>"
    </#if>
    <#if parameters.iconWidth?exists>
     iconWidth="<@s.url value='${parameters.iconWidth?html}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.iconHeight?exists>
     iconHeight="<@s.url value='${parameters.iconHeight?html}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.toggleDuration?exists>
     toggleDuration=${parameters.toggleDuration?c}
    </#if>
    <#if parameters.templateCssPath?exists>
     templateCssPath="<@s.url value='${parameters.templateCssPath}' encode="false" includeParams='none'/>"
    </#if>
    <#if parameters.showGrid?exists>
     showGrid="${parameters.showGrid?default(true)?string}"
    </#if>
    <#if parameters.showRootGrid?exists>
     showRootGrid="${parameters.showRootGrid?default(true)?string}"
    </#if>
    <#if parameters.id?exists>
     id="${parameters.id?html}"
    </#if>
    <#if parameters.treeSelectedTopic?exists>
     publishSelectionTopic="${parameters.treeSelectedTopic?html}"
    </#if>
    <#if parameters.treeExpandedTopic?exists>
     publishExpandedTopic="${parameters.treeExpandedTopic?html}"
    </#if>
    <#if parameters.treeCollapsedTopic?exists>
     publishCollapsedTopic="${parameters.treeCollapsedTopic?html}"
    </#if>
    <#if parameters.toggle?exists>
     toggle="${parameters.toggle?html}"
    </#if>
     controller="${parameters.id?html}_controller" <#-- Added by Max -->    
     >
    <#if parameters.label?exists>
    <div dojoType="TreeNode" title="${parameters.label?html}"
     <#if parameters.nodeIdProperty?exists>
     id="${stack.findValue(parameters.nodeIdProperty)}"
    <#else>
     id="${parameters.id}_root"
    </#if>
     >
    <#elseif parameters.rootNode?exists>
     ${stack.push(parameters.rootNode)}
    <#-- Edited by Max -->    
    <div dojoType="TreeNode" 
              title="${stack.findValue(parameters.nodeTitleProperty)}"
              widgetId="${stack.findValue(parameters.nodeIdProperty)}"
              isFolder="<#if stack.findValue(parameters.childCollectionProperty)?size gt 0>true<#else>false</#if>"
              objectId="${stack.findValue(parameters.nameValue)}">
        </div>
    <#-- End -->        
    <#assign oldNode = stack.pop()/> <#-- pop the node off of the stack, but don't show it -->
    </#if>    清单10 src/template/realajax/tree.ftl

对上述稍作解释,上述代码主要在原版的src/template/ajax/tree.ftl的基础上添加了TreeRPCController的控件,并只输出根节点。由于<s:tree />没有类似nodeObjectIdProperty的属性,所以我用了value属性表示objectId对应的属性名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值