2013-02-14 3 views
2

Я пытаюсь создать собственный тег. В этом теге я передам атрибут Object as и он должен вернуть список массивов. Я пробовал это, и я получаю исключение.передать объект как атрибут тега JSTL

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

Я думаю, что мой параметр отправки в виде строки в класс и там его не в состоянии преобразовать объект данного типа. Как я могу решить его и передать сам объект и приписать его в классе (поскольку сам 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; 
    } 

} 

ответ

2

Вы испытываете это исключение, потому что вам не хватает тега <type> внутри вашего тега <attribute> в вашем файле .tld.
Тег <type> не является обязательным и атрибут без тега <type> предполагается, что он имеет тип данных String.
Кроме того, вам необходимо установить rtexprvalue = true. Значение rtexprvalue означает Значение выражения времени выполнения. Вы должны установить его значение в true, чтобы значение атрибута можно было динамически вычислять во время выполнения.
Так что ваша attribute декларация должна быть, как это в вашем файле .tld:

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

Надеется, что это помогает!

+0

Спасибо за ответ. Я включил тип, но у меня возникло исключение :( org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.String не может быть отнесено к com.showtable.helper.ParentNode – arjuncc

+0

Затем Я думаю, вам также нужно установить 'rtexprvalue = true'! –

+0

@arjuncc! Я обновил свой ответ! –

Смежные вопросы