2009-07-17 8 views
0

Ich versuche, dynamische Attribute in Jsp zu verarbeiten, aber ich bekomme keine Anzeige als Antwort.Problem beim Interpretieren von dynamischen Attributen in Jsp

Hier ist der JSP-Code:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="mine" uri="DiceFunctions" %> 


<html><body> 

<mine:advice suggest="yo haa haa" > 

</mine:advice> 
</body></html> 

Die TLD-Datei, die in WEB-INF-Ordner ist:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> 

<tlib-version>1.2</tlib-version> 
<jsp-version>2.0</jsp-version> 
<uri>DiceFunctions</uri> 

<tag> 

<name>advice</name> 
<tag-class>foo.AdvisorTagHandler</tag-class> 
<body-content>scriptless</body-content> 
<attribute> 
<name>optionList</name> 
<type>java.util.List</type> 
<required>false</required> 
<rtexprvalue>true</rtexprvalue> 
</attribute> 
<attribute> 
<name>name</name> 
<required>false</required> 
</attribute> 
<attribute> 
<name>size</name> 
<required>false</required> 
</attribute> 
<dynamic-attributes>true</dynamic-attributes> 

</tag> 

und der Tag-Handler-Klasse:

package foo; 
import javax.servlet.jsp.JspException; 
import javax.servlet.jsp.tagext.*; 
import java.io.*; 
import javax.servlet.jsp.*; 
import java.util.*; 

public class AdvisorTagHandler extends TagSupport implements DynamicAttributes { 



private Map<String,Object> tagAttrs=new HashMap<String,Object>(); 

public int doStartTag() throws JspException{ 
//movieCounter=0; 
try{ 


for(String attr: tagAttrs.keySet()) 
{ 
String attrd=String.format("%s='%s'",tagAttrs.get(attr)); 

pageContext.getOut().print(attrd); 
} 

} 
catch(Exception e) 
{ 
} 

return SKIP_BODY; 
} 

public void setDynamicAttribute(String uri, String name, Object value){ 

tagAttrs.put(name,value); 
} 
public int doEndTag() throws JspException{ 
return EVAL_PAGE; 
} 

was ist die Änderung muss ich tun, um dynamische Attribute anzuzeigen?

Vielen Dank im Voraus.

Antwort

2

Es gibt ein Problem in dieser Zeile:

String attrd = String.format("%s='%s'", tagAttrs.get(attr)); 

Sie geben zwei String-Argumente, sondern nur eine zur Verfügung stellen .

So etwas sollte besser funktionieren:

try { 
    for (Map.Entry<String, Object> attr : tagAttrs.entrySet()) { 
    String attrd = String.format("%s='%s'", attr.getKey(), attr 
     .getValue().toString()); 
    pageContext.getOut().print(attrd); 
    } 
} catch (IOException e) { 
    throw new JspException(e); 
} 
+0

Danke McDowell für Ihre Hilfe. Jetzt funktioniert es gut. – Greenhorn

1

Sie könnten einige Code in die leeren catch-Blöcke und sehen, was passiert ...

+0

Ich habe versucht, e.getMessage() oder e.printStackTrace() -Methoden in catch-Block, aber immer noch nichts als Antwort bekommen. – Greenhorn