JSP 사용자 정의 태그 라이브러리 (속성에 대한 세터 메소드를 찾을 수 없음)

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

  •  03-07-2019
  •  | 
  •  

문제

사용자 정의 태그에 문제가 있습니다 :-

org.apache.jasper.jasperexception : /custom_tags.jsp(1,0) 속성에 대한 세터 메소드를 찾을 수 없습니다 : FirstName

이것은 내 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"/>

코드가 다시 컴파일되고 올바르게 배포되었는지 확인했습니다.

따라서 문제는 왜 세터 방법을 찾을 수 없습니까 ???

도움이 되었습니까?

해결책

태그 요소의 속성 사례를 확인하십시오. 멤버 변수의 경우가 아니라 세터의 경우와 일치해야합니다 (아마도 비공개 일 것입니다).

규칙은 속성 이름에 첫 번째 문자가 자본화 된 다음 결과가 'set'에 의해 접두사로 설정되어 세터 이름에 도달한다는 것입니다.

귀하의 경우 속성을 불렀습니다 'firstname', 규칙은 JSP 컴파일러가 'setfirstname'메소드를 찾고 있습니다. 당신이 당신의 세터를 지명했을 때 'setFirstName' (자본 'n'과 함께), 당신은 사용해야합니다. 'firstName' 속성 이름에 대한 (자본 'n'도 포함).

동일한 규칙을 'lastname' 속성, 도착 'lastName', 그리고 당신은 사업에 있어야합니다.

추신 : 좋은 IDE를 사용합니다 IntelliJ,이 경우에는 속성에 대한 유효한 이름을 제안하여 머리 긁힘을 많이 절약 할 수 있으므로 도움이되었을 것입니다.

다른 팁

예제의 TLD 파일은 말도 안되는 것처럼 보입니다. 올바르게 포맷하지 않았기 때문인지 모르겠습니다.

그만큼 꼬리표 사용자 정의 태그의 요소에는 다음이 있어야합니다 기인하다 노출하려는 각 속성에 해당하는 요소. 같은 것 :

<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>

기본적으로 속성은 문자열입니다. 이것은 a를 추가하여 무시할 수 있습니다 유형 내의 요소 기인하다 요소.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top