2
我正在使用Struts2來創建我的web應用程序,但我正面臨從Struts2定製標籤的問題。爲新標籤寫tld
我想添加一個屬性到錨標籤,我創建了這樣做的類。但我不知道如何整合它。我想我必須創建一個tld,但我不知道是否必須使用整個struts-tags.tld我只想重寫此tld,但我不知道如何。
我正在使用Struts2來創建我的web應用程序,但我正面臨從Struts2定製標籤的問題。爲新標籤寫tld
我想添加一個屬性到錨標籤,我創建了這樣做的類。但我不知道如何整合它。我想我必須創建一個tld,但我不知道是否必須使用整個struts-tags.tld我只想重寫此tld,但我不知道如何。
這裏是我的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>
你是什麼試圖實現,你需要添加自定義屬性標籤? –
我想添加一個布爾「標記」屬性。如果提及並將其值設置爲「是」,則url將包含一個標記,並將一個特定的javascript函數添加到onclick屬性中。 – Florent06
例如: '
鏈接' 會寫 ''Link如何 – Florent06