在学习JavaWeb JSTL与自定义标签时遇到的坑,用的老师给的代码结果直接原地报错:javax.servlet.ServletException: org.apache.jasper.JasperException: /math.jsp (line: [15], column: [0]) Unable to find setter method for attribute: [x], 代码如下
package com.sirifeng.mytag; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; /** * @author SiriFeng */ public class MathTag extends SimpleTagSupport { double x; public double getX() { return x; } public void setX(String x) { double num = 0; num = Double.parseDouble(x); this.x = num; } @Override public void doTag() throws IOException { JspWriter out = getJspContext().getOut(); out.println(x+"的平方根是:"+Math.sqrt(x)); } }
报错说找不到属性x的setter方法,这里看了一下x的属性类型是double,setter方法的属性类型是String,应该是这里出现的问题,我把setter方法改成默认的setter方法后就能正常运行了,修改如下:
package com.sirifeng.mytag; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.SimpleTagSupport; import java.io.IOException; /** * @author SiriFeng */ public class MathTag extends SimpleTagSupport { double x; public double getX() { return x; } public void setX(double x) { this.x = x; } @Override public void doTag() throws IOException { JspWriter out = getJspContext().getOut(); out.println(x+"的平方根是:"+Math.sqrt(x)); } }
这里有个疑问就是从jsp传过来的值是String,但是这边调用setter方法的参数类型是double,中间哪个过程它自己把类型给转化了?求大佬指点。