2009-07-17 4 views
0

Я пытаюсь обрабатывать динамические атрибуты в Jsp, но я ничего не вижу в ответе.Проблема в интерпретации динамических атрибутов в Jsp

Вот код JSP:

<%@ 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> 

Файл TLD, который находится в WEB-INF папку:

<?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> 

и обработчик тега класса:

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; 
} 

какой модификация мне нужно сделать, чтобы отобразить значение динамических атрибутов?

Заранее спасибо.

ответ

2

Существует проблема в этой строке:

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

Можно указать два строковых аргумент, но только обеспечивает один ,

Что-то, как это должно работать лучше:

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

Спасибо McDowell за вашу помощь. Теперь он работает нормально. – Greenhorn

1

Вы можете поместить код в пустых блоках улова и посмотреть, что происходит ...

+0

Я попытался e.getMessage() или e.printStackTrace() методы в блоке поймать, но до сих пор ничего не получить в ответ. – Greenhorn