当前位置:  开发笔记 > 运维 > 正文

JSP自定义标记库(无法找到属性的setter方法)

如何解决《JSP自定义标记库(无法找到属性的setter方法)》经验,为你挑选了1个好方法。

我在使用自定义标签时遇到问题: -

org.apache.jasper.JasperException:/custom_tags.jsp(1,0)无法找到属性的setter方法: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"?>

     1.1
     1.1
     utility
     /WEB-INF/nametagdesc.tld
     
       A simple tag library for the examples
     
   
       name
       com.cg.tags.NameTag
       empty
      
      firstname
      true
      true
      
      
      lastname
      true
      true
    
 

这是我的JSP页面:

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


我检查过代码是否重新编译并正确部署等等....

所以,问题是,为什么不能找到setter方法???



1> belugabob..:

检查标记元素中属性的大小写 - 它们应该与setter的大小写相匹配,而不是成员变量的大小写(顺便说一下,它应该是私有的).

规则是属性名称的首字母大写,然后结果以'set'为前缀,以得到setter名称.

在您的情况下,您已调用该属性'firstname',因此该规则会导致JSP编译器查找"setFirstname"方法.当您命名您的setter 'setFirstName'(使用大写'N')时,您应该使用'firstName'(也使用大写'N')作为属性名称.

'lastname'属性应用相同的规则,到达'lastName',您应该开展业务.

PS IntelliJ在这种情况下,使用一个好的IDE 会有所帮助,因为它会为你的属性建议有效的名称,从而为你节省大量的时间.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有