Java问题汇集(1)
1.javax.el.PropertyNotFoundException: Property 'Price' not found on type pet.petshop.dto.WareDto
简答:主要是原因是WareDto中的属性Price的命名不规范造成的
private float Price 错误的写法 private float price 正确的写法 ${ware.Price}获取不到 ${ware.price}可以获取到
private float MyName 错误的写法 private float myName 正确的写法 ${ware.Myname}获取不到 ${ware.myName}可以获取到
注解:也许按java的语法来说,这两种写法都没有错,但是使用el表达式的时候,它会默认属性名是小写开头,即我们通常的写法.当然大家也许觉得这是个bug,但是大家也许会注意到另一个问题,struts2传参时,struts的机制到底是通过你的属性名来传值,还是通过setter/getter方法名来确定传值呢,答案是后者。这里是题外话。这里给出出现该类异常的常见原因:1.可能是el表达式中你的属性名写错,跟没有该属性是同一种错误 2.可能是setter/getter方法没写
2.org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c in /manager/ware_management.jsp</h3><p>182: Illegal child tag in "c:choose" tag: "c:forEach" tag</p>
简答:这个问题是c:choose标签被截断引起的
错误代码:
1 <c:choose> 2 <c:when test="${fn:length(requestScope.pages.list)>0}"></c:when> 3 <c:forEach items="${requestScope.pages.list}" var="ware"> 4 <tr> 5 <td><input type="checkbox" name="DeleteID" value='${ware.wareID}'/></td> 6 <td> ${ware.sortName}</td> 7 <td> <a href="${ctx}/ware/WaretServlet?action=ware_info&flag=0&WareID=${ware.wareID}">${ware.wareName}</a></td> 8 <td> ${ware.addr}</td> 9 <td> ${ware.company}</td> 10 11 <td><a href="${ctx}/ware/WaretServlet?action=ware_info&flag=1&WareID=${ware.wareID}"><img src="${ctx}/manager/images/user_edit.png" alt="" title="" border="0" /></a></td> 12 <td><a href="#" class="ask"><img src="${ctx}/manager/images/trash.png" alt="" title="" border="0" /></a></td> 13 </tr> 14 </c:forEach> 15 16 <c:otherwise> 17 <tr> 18 <td colspan="7">还没有相关产品哦,快去添加一些吧~~~</td> 19 </tr> 20 </c:otherwise> 21 </c:choose>
正确的代码:
1 <c:choose> 2 <c:when test="${fn:length(requestScope.pages.list)>0}"> 3 <c:forEach items="${requestScope.pages.list}" var="ware"> 4 <tr> 5 <td><input type="checkbox" name="DeleteID" value='${ware.wareID}'/></td> 6 <td> ${ware.sortName}</td> 7 <td> <a href="${ctx}/ware/WaretServlet?action=ware_info&flag=0&WareID=${ware.wareID}">${ware.wareName}</a></td> 8 <td> ${ware.addr}</td> 9 <td> ${ware.company}</td> 10 11 <td><a href="${ctx}/ware/WaretServlet?action=ware_info&flag=1&WareID=${ware.wareID}"><img src="${ctx}/manager/images/user_edit.png" alt="" title="" border="0" /></a></td> 12 <td><a href="#" class="ask"><img src="${ctx}/manager/images/trash.png" alt="" title="" border="0" /></a></td> 13 </tr> 14 </c:forEach> 15 </c:when> 16 <c:otherwise> 17 <tr> 18 <td colspan="7">还没有相关产品哦,快去添加一些吧~~~</td> 19 </tr> 20 </c:otherwise> 21 </c:choose>
看上面的代码,大家会发现是在第2行的c:when截断了choose代码
3.js中使用el表达式问题
一:可以通过window.onload()来得到EL的值再传送给JS文件里的全局变量、方法进行变量初始化 。
二:可以在JSP页面中添加一个隐藏域,给它赋值,在单独的js文件中,通过获取隐藏域的值就间接的获取到了EL表达式的值。
4.javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
出错代码:
<%--<c:set var="goods" value="${requestScope.pages.list}"/>正确代码--%> <%--<c:set var="goods" value="${requestScope.pages}"/>错误代码--%> <c:set var="goods" value="${requestScope.pages}"/> <c:forEach items="${goods}" var="good"> <tr> <td><input type="checkbox" name="DeleteID" value="${good.goodsID}" /></td> <td> ${good.goodsID}</td> <td><a href="../ware_detail.jsp?WareID=${good.wareID}" >${good.wareName}</a></td> <td> <a href="user_detail.jsp?UserID=${good.userID}" >${good.userName}</a></td> <td> ${good.buyNumber}</td> <td> ${good.createtime}</td> </tr> </c:forEach>
原因: 这里面错误的原因就是items里面不是集合
5.net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
具体:把ArrayList<WareDto>转化为Json数据时出错。
原因:WareDto为非标准的JavaBean或里面有属性没有提供setter/getter方法
6.严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlMapClient' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: ServletContext resource [/WEB-INF/sqlmap-config.xml]; nested exception is com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/resultMap/result'. Cause: com.ibatis.common.beans.ProbeException: There is no WRITEABLE property named 'userName_cn' in class 'com.sie.vo.User'
57 more
提示:遇到这种问题,应该顺着Cause一个一个往下找,最后找到了'userName_cn' in class 'com.sie.vo.User'
7.An internal error occurred during: "Launching SSI2 on Tomcat 6.x".
解决方案:
1、首先关闭MyEclipse工作空间。
2、然后删除工作空间下的
“/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.genuitec.eclipse.ast.deploy.core.prefs”
这个文件。在这个文件中存储了一些部署项目的信息。删了这个部署的项目的信息就没有错误了。
3、重启启动MyEclipse即可解决了。