org.apache.jasper.JasperException: не удается найти метод установки для таблицы атрибутов обработчика тега

У меня проблема с тегом Jsp Custom. Мой класс TagHandler PrintSqlTable определил, что имя поля данных или содержимое тега TLD являются такими же, как объявление. Но Complier показывает исключение: не удается найти метод установки для атрибута 'table' обработчика тега


Класс обработчика тегов:

public class PrintSqlTable extends TagSupport {

private String id;
private String table;
private Connection dbConnection;

/**Set the id value
 * @param id*/
public void setId(String id) {
    this.id = id;
}

/**Set the table name
 * @param table*/
public void SetTable(String table) {
    this.table = table;
}

@Override
public int doStartTag() throws JspException {
    JspWriter out = pageContext.getOut();

    /**Establish the Database Connection*/
    try {
        dbConnection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jmysql",
                "root", "root!@#$Mysql2016");
        PreparedStatement pst = dbConnection.prepareStatement(
        "SELECT *FROM " + table + " WHERE id = ?");
        pst.setInt(1, Integer.parseInt(id));
        ResultSet rs = pst.executeQuery();

        if (rs != null) {
            ResultSetMetaData rsmd = rs.getMetaData();

            /**Get the Table Column Name*/
            out.println("<table>");
            out.println("<tr>");
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                out.println("<th>" + rsmd.getColumnName(i) + "</th>");
            }
            out.println("</tr>");

            /**Get the Table Row Values*/
            if (rs.next()) {
                out.println("<tr>");
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    out.println("<td>" + rs.getString(i) + "</td>");
                }
                out.println("</tr>");
            }
            out.println("</table>");

        } else {
            out.println(table + " Table Does not Found...!");
        }

    } catch (SQLException | IOException iosql) {
        System.out.println(iosql);
    }
    return SKIP_BODY;
}

}


Файл TLD:

<?xml version="1.0" encoding="UTF-8"?>
<taglib >
<tlib-version>1.0</tlib-version>
<short-name>pt</short-name>
<uri>/WEB-INF/tlds/PrintTable</uri>
<tag>
<name>printRecored</name>
  <tag-class> com.jservlet.jsp.chapter.customtags.PrintSqlTable</tag-class>
<attribute>
   <name>id</name>
   <required>true</required>
</attribute>
<attribute>
      <name>table</name>
      <required>true</required>
  </attribute>
</tag>
</taglib>

Файл JSP

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/tlds/PrintTable.tld" prefix="pt" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Print Table</title>
</head>
<body>
<pt:printRecored id="49" table="student"> </pt:printRecored>
</body>


person Ng Sharma    schedule 09.11.2016    source источник


Ответы (1)


Вы используете 'S', т.е. метод SetTable(String table) (в вашем PrintSqlTable классе) НЕ соответствует соглашениям о Java Bean, поэтому имя метода необходимо изменить, как показано ниже:

public void setTable(String table) {
    this.table = table;
}

Для каждого атрибута тега вы должны определить метод set в обработчике тега, который соответствует соглашениям об архитектуре JavaBeans. Вы можете посмотреть здесь

person developer    schedule 09.11.2016
comment
исправьте этот метод setTable (String table) и снова запустите эту программу, но покажите другую ошибку show org.apache.jasper.JasperException: PWC6033: Ошибка компиляции Javac для JSP - person Ng Sharma; 09.11.2016