昨天群聊时候,某兄弟遇到的一个javabean问题,不能找到属性
下面先把他代码发出来,
读者先看看那里错误,给你5分钟时间喔!
<body> <%! String sCPU=""; %> <%! String sHarddisk=""; %> <%! String sPrice=""; %> <% sCPU=request.getParameter("clq"); sHarddisk=request.getParameter("yp"); sPrice=request.getParameter("jiage"); %> <jsp:useBean id="computerbeans" scope="page" class="javado.javado"/> <jsp:setProperty name="computerbeans" property="sCPU" value="<%= sCPU%>"/> <jsp:setProperty name="computerbeans" property="sHarddisk" value="<%= sHarddisk%>"/> <jsp:setProperty name="computerbeans" property="sPrice" value="<%= sPrice%>"/> 你需要的计算机配置的信息为:<br> 处理器:<jsp:getProperty name="computerbeans" property="sCPU"/><br> 硬盘:<jsp:getProperty name="computerbeans" property="sHarddisk"/><br> 价格:<jsp:getProperty name="computerbeans" property="sPrice"/><br> <br> <form action="index.jsp">你想要的处理器型号:<input type="text" name="clq"><br> 你要的硬盘:<input type="text" name="yp"><br> 你要的价格:<input type="text" name="jiage"><br> <input type="submit" value="提交"> </form> </body>
下面这个是javabean
package javado; public class javado { private String sCPU; private String sHarddisk; private String sPrice; public String getSCPU() { return sCPU; } public void setSCPU(String scpu) { sCPU = scpu; } public String getSHarddisk() { return sHarddisk; } public void setSHarddisk(String harddisk) { sHarddisk = harddisk; } public String getSPrice() { return sPrice; } public void setSPrice(String price) { sPrice = price; } }
***************这是问题,答案分割线********************
5分钟时间吧,哈哈
5
4
3
2
1.9
1.8
....
给一个提示,异常是这样
严重: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: Cannot find any information on property 'sCPU' in a bean of type 'javado.javado' at org.apache.jasper.runtime.JspRuntimeLibrary.getReadMethod(JspRuntimeLibrary.java:839) at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1048) at org.apache.jasper.compiler.Node$GetProperty.accept(Node.java:1106) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343) at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393) at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2399) at org.apache.jasper.compiler.Node$Root.accept(Node.java:489) at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343) at org.apache.jasper.compiler.Generator.generate(Generator.java:3365) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)
第二个提示:
JAVA命名规范: 1、 包命名:全部字母小写:org.sky.darkness 2、 类命名:单词的首字母大写:SimpleBean 3、 属性名称:第一个单词的首字母小写,之后的每一个单词的首字母大写 4、 方法命名:与属性命名相同:public void sayHellow(); 5、 常量命名:全部单词大写:final String DBDRIVER=”darkness”
答案:
根据提示二第2,3点修改就行了
被忽略的问题在这:
规范指明: "第一个单词的首字母小写,之后的每一个单词的首字母大写"中的"单词"
具体含义是啥?
例子中的属性sCPU,C就是第二个单词了
而引发的问题,就在此, 属性命名对于JavaBean来讲,第一个与第二个字母都要小写
javabean specification,规定了一般的属性名称首字母小写,
如果遇到前两个字母大写的属性,则getter方法保持属性名称不变,
例如URL属性的 getter方法为getURL,
但是并没有规定类似esCPU这样的属性的getter方法写成getsCPU的形式。 如果要符合javabean规范,则只能将sCPU改成scPU或者scpu了
入门资料都没有说到这个问题,
但新手经常犯这个毛病,坚持不下去就会严重丧失学习兴趣了
