2013-07-11 142 views
2

我正在使用Struts2來創建我的web應用程序,但我正面臨從Struts2定製標籤的問題。爲新標籤寫tld

我想添加一個屬性到錨標籤,我創建了這樣做的類。但我不知道如何整合它。我想我必須創建一個tld,但我不知道是否必須使用整個struts-tags.tld我只想重寫此tld,但我不知道如何。

+0

你是什麼試圖實現,你需要添加自定義屬性標籤? –

+0

我想添加一個布爾「標記」屬性。如果提及並將其值設置爲「是」,則url將包含一個標記,並將一個特定的javascript函數添加到onclick屬性中。 – Florent06

+0

例如: '鏈接' 會寫 ''Link如何 – Florent06

回答

0

這裏是我的Anchor.java:

package com.mycompany.struts.components; 

import java.util.UUID; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.struts2.views.annotations.StrutsTag; 
import org.apache.struts2.views.annotations.StrutsTagAttribute; 

import com.opensymphony.xwork2.util.ValueStack; 

@StrutsTag(name = "anchor", 
tldTagClass = "com.mycompany.struts.components.AnchorTag", 
description = "Render an anchor", 
allowDynamicAttributes = true) 
public class Anchor extends org.apache.struts2.components.Anchor { 

    protected String token; 

    public Anchor(ValueStack stack, HttpServletRequest request, 
           HttpServletResponse response) { 
     super(stack, request, response); 
    } 

    protected void evaluateExtraParams() { 
     super.evaluateExtraParams(); 
     if (token != null && (Boolean) findValue(token, Boolean.class)) { 
      String uuid = String.valueOf(UUID.randomUUID()); 
      urlParameters.put("idToken", uuid); 
      if(onclick == null) onclick = ""; 
      else if(onclick.trim().length() > 0 && onclick.trim().charAt(onclick.trim().length()-1) != ';') { 
       onclick += "; "; 
      } 
      else { 
       onclick += " "; 
      } 
      onclick += "tokenizedURL('"+uuid+"');"; 
     } 
    } 

    @StrutsTagAttribute(description = "Token", type = "Boolean", defaultValue = "false") 
    public void setToken(String token) { 
     this.token = token; 
    } 
} 

這裏是我的AnchorTag.java:

package com.mycompany.struts.components; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.struts2.components.Component; 

import com.opensymphony.xwork2.util.ValueStack; 

public class AnchorTag extends org.apache.struts2.views.jsp.ui.AnchorTag { 
private static final long serialVersionUID = 5811285953670562288L; 

protected String token; 

public Component getBean(ValueStack stack, HttpServletRequest req, 
         HttpServletResponse res) { 
    return new Anchor(stack, req, res); 
} 

protected void populateParams() { 
    super.populateParams(); 
    Anchor anchor = ((Anchor) component); 
    anchor.setToken(token); 
    } 
    public void setToken(String token) { 
    this.token = token; 
    } 
} 

這裏是我的一個-close.ftl:

<#-- 
/* 
* ... 
*/ 
--> 
<a<#rt/> 
<#if parameters.id?if_exists != ""> 
id="${parameters.id?html}"<#rt/> 
</#if> 
<#if parameters.href?if_exists != ""> 
href="${parameters.href}"<#rt/> 
</#if> 
<#if parameters.tabindex??> 
tabindex="${parameters.tabindex?html}"<#rt/> 
</#if> 
<#if parameters.cssClass??> 
class="${parameters.cssClass?html}"<#rt/> 
</#if> 
<#if parameters.cssStyle??> 
style="${parameters.cssStyle?html}"<#rt/> 
</#if> 
<#if parameters.title??> 
title="${parameters.title?html}"<#rt/> 
</#if> 
<#include "/${parameters.templateDir}/simple/scripting-events.ftl" /> 
<#include "/${parameters.templateDir}/simple/common-attributes.ftl" /> 
<#include "/${parameters.templateDir}/simple/dynamic-attributes.ftl" /> 
>${parameters.body}</a>