Библиотека пользовательских тегов JSP (Не удалось найти метод установки атрибута)

StackOverflow https://stackoverflow.com/questions/224748

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня возникли проблемы с пользовательским тегом:-

org.apache.jasper.JasperException (исключение):/custom_tags.jsp(1,0) Не удается найти метод установки атрибута :имя

Это мой класс TagHandler:

package com.cg.tags;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class NameTag extends TagSupport{

    public String firstname;
    public String lastname;

    public void setFirstName(String firstname){

        this.firstname=firstname;
        }
    public void setLastName(String lastname){

        this.lastname=lastname;
        }

    public int doStartTag() throws JspException {
        try {
            JspWriter out=pageContext.getOut();
            out.println( "First name:  "+firstname+ "Last name: "+lastname);

        } catch (Exception ex) {
            throw new JspException("IO problems");
        }
        return SKIP_BODY;
    }


}

Это мой файл TLD:

?xml version="1.0" encoding="UTF-8"?>
<taglib>
     <tlibversion>1.1</tlibversion>
     <jspversion>1.1</jspversion>
     <shortname>utility</shortname>
     <uri>/WEB-INF/nametagdesc.tld</uri>
     <info>
       A simple tag library for the examples
     </info>
   <tag>
       <name>name</name>
       <tagclass>com.cg.tags.NameTag</tagclass>
       <bodycontent>empty</bodycontent>
      <attribute>
      <name>firstname</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      </attribute>
      <attribute>
      <name>lastname</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
 </tag>
</taglib>

И это моя страница JSP:

<%@ taglib uri="/WEB-INF/nametagdesc.tld" prefix="cg"  %>

<cg:name firstname="fname" lastname="lname"/>

Я проверил, что код перекомпилирован и развернут правильно и т.д. и т.п....

Итак, вопрос в том, почему он не может найти метод setter???

Это было полезно?

Решение

Проверьте регистр атрибутов в вашем элементе тега - они должны соответствовать регистру установщика, а не регистру переменных-членов (которые, кстати, вероятно, должны быть частными).

Правило состоит в том, что первая буква имени атрибута пишется заглавной, а затем результат дополняется префиксом "set", чтобы получить имя установщика.

В вашем случае вы вызвали атрибут 'firstname', таким образом, правило приводит к тому, что компилятор JSP ищет метод 'setFirstName'.Как вы назвали своего сеттера 'setFirstName' (с большой буквы "N"), вы должны использовать 'firstName' (Также с заглавной буквы "N") для имени атрибута.

Примените то же правило к 'lastname' атрибут, чтобы прийти к 'lastName', и вы должны заниматься бизнесом.

P.S.Используя хорошую IDE, например IntelliJ, помогло бы в этом случае, так как предложило бы допустимые имена для ваших атрибутов, избавив вас от необходимости ломать голову.

Другие советы

Файл TLD в вашем примере выглядит чепухой, я не знаю, так ли это, потому что вы неправильно отформатировали его.

Элемент tag для вашего пользовательского тега должен иметь элемент attribute , который соответствует каждому атрибуту, который вы хотите предоставить. Что-то вроде:

<tag>
  <name>...</name>
  <tag-class>...</tag-class>
  <body-content>...</body-content>
  <display-name>...</display-name>
  <description>...</description>

  <attribute>
    <name>firstName</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    <description>...</description>
  </attribute>
</tag>

Обратите внимание, что по умолчанию атрибуты являются строками. Это можно отменить, добавив элемент type в элемент attribute .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top