我正在尝试在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; }
显示动态属性值需要做哪些修改?
提前致谢。
此行存在问题:
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); }