3

カスタムタグを作成しようとしています。このタグでは、オブジェクトを属性として渡し、配列リストを返す必要があります。私はそれを試しましたが、次のような例外が発生しています。

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

私のパラメーターは文字列としてクラスに送信され、オブジェクトを特定の型にキャストできないと思います。どうすればそれを解決してオブジェクト自体を渡し、クラスで型キャストできますか (文字列自体はクラスなので可能だと思いますが、その方法はわかりません) 私のコードを以下に示します。内側のページ

内部ページ

<%@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>ファイルのタグ内にタグがないため、この例外が発生<attribute>してい.tldます。タグはオプションであり、タグのない属性
はデータ型であると見なされます。 また、設定する必要があります。はRuntime Expression Valueの略です。実行時に属性の値を動的に計算できるように、その値を true に設定する必要があります。 したがって、宣言はファイル内で次のようにする必要があります。<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 に答える