代码如下:
1.action的部分代码:
ConnectionBean cb = new ConnectionBean();
ResultSet rs = null, rs1 = null;
List arr = new ArrayList();
List array = new ArrayList();
HttpSession session = request.getSession(true);
String state = request.getParameter("state"); if (state == "add" || state.equals("add")) {
int id = Integer.parseInt(request.getParameter("id"));
if (id == 0) { rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass order by cy_Order "); try {
while (rs.next()) {
TypeForm tf = new TypeForm();
tf.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tf.setTypeName(nbsp + rs.getString(2)); arr.add(tf); }
rs.close();
cb.close();
session.setAttribute("type", arr); return mapping.findForward("showParentType"); } catch (Exception e) {
e.printStackTrace();
}
} else {
rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass order by cy_Order "); try {
while (rs.next()) {
TypeForm tf = new TypeForm();
tf.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tf.setTypeName(nbsp + rs.getString(2)); arr.add(tf); } session.setAttribute("type", arr); rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass where cy_Id=" +
id + "");
TypeForm tff = new TypeForm();
while (rs.next()) { tff.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tff.setTypeName(nbsp + rs.getString(2)); }
request.setAttribute("default", tff);
rs.close();
cb.close(); return mapping.findForward("showParentType");
} catch (Exception e) {
e.printStackTrace();
}
} }
2.jsp页面的部分代码:
<TD><logic:notPresent name="default">
<html:select property="typeId" size="1" name="">
<option value="0">无(作为一级分类)</option>
<html:optionsCollection name="type" label="typeName" value="typeId" filter="false"/>
</html:select>
</logic:notPresent>
<logic:present name="default">
<html:select property="typeId" name="default" size="1">
<option value="0">无(作为一级分类)</option>
<html:optionsCollection name="type" label="typeName" value="typeId" filter="false"/>
</html:select>
</logic:present>
</TD>
3.问题症状:
首先在jsp页面点击不同的链接,给一个action传state和id两个参数,通过这两个参数,判断要执行的操作也就是:添加一级分类,还是在某个分类下添加子类,如果id等于0,怎是添加一级分类,不为零则添加为某个已存在类的子类。添加为子类的时候运行正常,问题出在添加为一级分类的时候,以下是错误提示代码:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Cannot find bean under name
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:166)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.jsp.JspException: Cannot find bean under name
org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:301)
org.apache.struts.taglib.html.SelectTag.doStartTag(SelectTag.java:244)
org.apache.jsp.typeAdd_jsp._jspx_meth_html_select_0(typeAdd_jsp.java:213)
org.apache.jsp.typeAdd_jsp._jspx_meth_logic_notPresent_0(typeAdd_jsp.java:187)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:104)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.
1.action的部分代码:
ConnectionBean cb = new ConnectionBean();
ResultSet rs = null, rs1 = null;
List arr = new ArrayList();
List array = new ArrayList();
HttpSession session = request.getSession(true);
String state = request.getParameter("state"); if (state == "add" || state.equals("add")) {
int id = Integer.parseInt(request.getParameter("id"));
if (id == 0) { rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass order by cy_Order "); try {
while (rs.next()) {
TypeForm tf = new TypeForm();
tf.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tf.setTypeName(nbsp + rs.getString(2)); arr.add(tf); }
rs.close();
cb.close();
session.setAttribute("type", arr); return mapping.findForward("showParentType"); } catch (Exception e) {
e.printStackTrace();
}
} else {
rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass order by cy_Order "); try {
while (rs.next()) {
TypeForm tf = new TypeForm();
tf.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tf.setTypeName(nbsp + rs.getString(2)); arr.add(tf); } session.setAttribute("type", arr); rs = cb.dbSelect(
"select cy_Id,cy_Name,cy_Level from cy_articleclass where cy_Id=" +
id + "");
TypeForm tff = new TypeForm();
while (rs.next()) { tff.setTypeId(rs.getInt(1));
String nbsp = "";
for (int i = 0; i < rs.getInt(3); i++) {
nbsp += " ";
} tff.setTypeName(nbsp + rs.getString(2)); }
request.setAttribute("default", tff);
rs.close();
cb.close(); return mapping.findForward("showParentType");
} catch (Exception e) {
e.printStackTrace();
}
} }
2.jsp页面的部分代码:
<TD><logic:notPresent name="default">
<html:select property="typeId" size="1" name="">
<option value="0">无(作为一级分类)</option>
<html:optionsCollection name="type" label="typeName" value="typeId" filter="false"/>
</html:select>
</logic:notPresent>
<logic:present name="default">
<html:select property="typeId" name="default" size="1">
<option value="0">无(作为一级分类)</option>
<html:optionsCollection name="type" label="typeName" value="typeId" filter="false"/>
</html:select>
</logic:present>
</TD>
3.问题症状:
首先在jsp页面点击不同的链接,给一个action传state和id两个参数,通过这两个参数,判断要执行的操作也就是:添加一级分类,还是在某个分类下添加子类,如果id等于0,怎是添加一级分类,不为零则添加为某个已存在类的子类。添加为子类的时候运行正常,问题出在添加为一级分类的时候,以下是错误提示代码:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Cannot find bean under name
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:166)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.jsp.JspException: Cannot find bean under name
org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:301)
org.apache.struts.taglib.html.SelectTag.doStartTag(SelectTag.java:244)
org.apache.jsp.typeAdd_jsp._jspx_meth_html_select_0(typeAdd_jsp.java:213)
org.apache.jsp.typeAdd_jsp._jspx_meth_logic_notPresent_0(typeAdd_jsp.java:187)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:104)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.
保证"default"参数有值,换用logic:equal和logic:notequal标签试试
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Cannot find bean under name org.apache.struts.taglib.html.BEAN
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:213)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.jsp.JspException: Cannot find bean under name org.apache.struts.taglib.html.BEAN
org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:301)
org.apache.struts.taglib.html.SelectTag.doStartTag(SelectTag.java:244)
org.apache.jsp.typeAdd_jsp._jspx_meth_html_select_1(typeAdd_jsp.java:350)
org.apache.jsp.typeAdd_jsp._jspx_meth_logic_equal_0(typeAdd_jsp.java:325)
org.apache.jsp.typeAdd_jsp._jspService(typeAdd_jsp.java:115)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.
这个标签是针对Bean的,假如你有个bean明叫form,其中的数组属性是typeId,你就可以这样写
<html:select property="typeId" size="1" name="form">
我如上写的目的是为了匹配XXX 这个bean的typeId的这个属性的值,这个值就是我想默认选中的值,其他的值是循环输出的。如果XXX不存在,则就是循环输出数组里所有的bean对象,如果XXXbean存在,就默认选中与此bean里的typeId属性值相等的选项
后来用logic:equal标签,还是出错
this.match = new String[1];
this.match[0] = this.value;
} else {
Object bean = TagUtils.getInstance().lookup(pageContext, name, null);
if (bean == null) {
JspException e =
new JspException(messages.getMessage("getter.bean", name));
TagUtils.getInstance().saveException(pageContext, e);
throw e;
} try {
this.match = BeanUtils.getArrayProperty(bean, property);
if (this.match == null) {
this.match = new String[0];
} } catch (IllegalAccessException e) {
TagUtils.getInstance().saveException(pageContext, e);
throw new JspException(
messages.getMessage("getter.access", property, name)); } catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
TagUtils.getInstance().saveException(pageContext, t);
throw new JspException(
messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) {
TagUtils.getInstance().saveException(pageContext, e);
throw new JspException(
messages.getMessage("getter.method", property, name));
}
}上面这段是Struts之SelectTag标签的关键源码,也就是说你的bean不能为空,我这两天也正读源码,了解到了很多以前不能明白的问题,这些东西是写好了的,所以它不能按照你的意愿行事,很多时候看看源码你就知道为什么了
可是仍然不行,不知道是不是select标签如果存在name属性,是否那个bean一定要匹配成功才行呢?