3

我正在尝试制作自定义标签。在这个标签中,我将传递一个对象作为属性,它应该返回一个数组列表。我已经尝试过了,但我遇到了一个例外。

org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.String cannot be cast to com.showtable.helper.ParentNode

我认为我的参数是作为 String 发送到类的,并且它无法将对象转换为给定类型。我该如何解决它并传递对象本身并在类中对其进行类型转换(因为 String 本身是一个类,我认为它可能,但我不知道该怎么做)我的代码如下所示。内页

内页

<%@taglib prefix="test" uri="/WEB-INF/tlds/ShowTableCustomTag.tld"%>
<%
//the 'theMainObject' is of type ParentNode
request.setAttribute("mainobject", theMainObject);
%>
<test:getorder objectpara="mainobject"></test:getorder>

ShowTableCustomTag.tld 内部

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
  <tlib-version>1.0</tlib-version>
  <short-name>showtablecustomtag</short-name>
  <uri>/WEB-INF/tlds/ShowTableCustomTag</uri>
 <tag>
    <name>getorder</name>
    <tagclass>cc.showtable.customtag.ParentNodeOrder</tagclass>
    <info>tag to return order as arraylist</info>
    <attribute>
      <name>objectpara</name>
      <required>true</required>
    </attribute>
</tag>
</taglib>

在 ParentNodeOrder 类内部

package cc.showtable.customtag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.showtable.helper.ParentNode;
public class ParentNodeOrder extends TagSupport{

     private Object objectpara;

    @Override
    public int doStartTag() throws JspException {

        try {
            //Get the writer object for output.
            JspWriter out = pageContext.getOut();
            ParentNode parent=(ParentNode)objectpara;
            out.println(parent.getOrder());

        } catch (IOException e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }
    public Object getObjectpara() {
        return objectpara;
    }
    public void setObjectpara(Object objectpara) {
        this.objectpara = objectpara;
    }

}
4

1 回答 1

2

您遇到此异常是因为您在文件中的<type>标签内缺少标签。标签是可选的,没有标签的属性 被假定为数据类型。 此外,您需要设置. 代表运行时表达式值。您需要将其值设置为 true,以便可以在运行时动态计算属性的值。 所以你的声明在你的文件中应该是这样的:<attribute>.tld
<type><type>String
rtexprvalue = truertexprvalue
attribute.tld

<attribute>
    <name>objectpara</name>
    <required>true</required>
    <type>com.showtable.helper.ParentNode</type>
    <rtexprvalue>true</rtexprvalue>
</attribute>

希望这可以帮助!

于 2013-02-15T05:37:00.253 回答