我试图从一个自定义jsp标签传递一个 java变量(Im在这里使用struts2从java类获取变量).这是我得到的错误. javax.servlet.ServletException: /pages/editBidForm.jsp(51,8) According to TLD or attribute directive in ta
javax.servlet.ServletException: /pages/editBidForm.jsp(51,8) According to TLD or attribute directive in tag file, attribute parentId does not accept any expressions org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) ....
这是我的jsp页面(部分)
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib uri="/WEB-INF/taglib.tld" prefix="custom" %> ... ... <table> <tr> <% String bidformoid=null; bidFormOid=request.getParameter("bidFormOid"); %> <td> <custom:zorancustomtag parentType = "BIDFORM" parentId = "<%= pageContext.getAttribute("bidFormOid") %>" /></td> </tr> </table>
我无法正确传递parentId参数.我能够正确传递parentType参数,因为它只涉及到传递字符串
这是taglib文件.
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>custom</shortname> <tag> <name>zorancustomtag</name> <tagclass>com.zoran.action.CustomizedTag</tagclass> <bodycontent>JSP</bodycontent> <info>Tag having a body and attributes</info> <attribute> <name>name</name> <required>false</required> <rtexpvalue>false</rtexpvalue> </attribute> <attribute> <name>parentType</name> <required>true</required> <rtexpvalue>true</rtexpvalue> </attribute> <attribute> <name>parentId</name> <required>true</required> <rtexpvalue>false</rtexpvalue> </attribute> </tag> </taglib>
和java类的自定义标签.
public class CustomizedTag implements Tag { private PageContext pageContext; private Tag parent; private String name; private int parentId; private String parentType; List list = null; public String getName() { return name; } public void setName(String name) { this.name = name; } /* public CustomizedTag() { super(); } */ public int doStartTag() throws JspException { Session session = SessionUtil.getSession(); session.beginTransaction(); try { JspWriter out = pageContext.getOut(); String parId = getParentId()+""; // out.println(getParent()+" "); String quer = "from ContentBase cb where cb.parentType=? AND cb.parentId=? ";//+parId; Query query = session.createQuery(quer); query.setParameter(0, getParentType()); query.setParameter(1, getParentId()); list = query.list(); ContentBase cb = new ContentBase(); if (null != list && !list.isEmpty()) { cb = (ContentBase) list.get(0); } // pageContext.getOut().print("Sri "+getName()); out.println(cb.getDescription()); } catch (IOException ioe) { throw new JspException("Error:"+ioe.getMessage()); } return SKIP_BODY; } public int doEndTag() throws JspException { return SKIP_PAGE; } public void release() { } public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public void setParent(Tag parent) { this.parent = parent; } public Tag getParent() { return parent; } public int getParentId() { return parentId; } public void setParentId(int parentId) { this.parentId = parentId; } public String getParentType() { return parentType; } public void setParentType(String parentType) { this.parentType = parentType; } }
任何人都可以让我知道如何通过自定义jsp标签传递一个java变量.
谢谢,
阿迪亚
<attribute> <name>parentId</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute>
这允许运行时表达式作为属性值提供.我仍然对JSP设计团队中的谁认为允许将其设置为false是一个好主意,仍然是神秘的.