struts-config.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
  <data-sources>
    <data-source>
      <set-property value="false" property="autoCommit" />
      <set-property value="Example Data Source Configuration" property="description" />
      <set-property value="com.microsoft.jdbc.sqlserver.SQLServerDriver" property="driverClass" />
      <set-property value="20" property="maxCount" />
      <set-property value="10" property="minCount" />
      <set-property value="sa" property="user"/>
      <set-property value="hongyang" property="password" />
      <set-property value="jdbc:microsoft:sqlserver//j2eeserver:1433;DatabaseName=hydata" property="url" />
    </data-source>
  </data-sources>
  <form-beans>
    <form-bean name="lykForm" type="strutstest.lykForm" />
    <form-bean name="lyk" type="strutstest.lyk" />
  </form-beans>
  <action-mappings>
    <action name="lykForm" type="strutstest.lykAction" validate="false" scope="request" path="/lykAction" />
  </action-mappings>
</struts-config>lykAction.java文件如下:(大家看看数据库的调用对吗?)
package strutstest;/**
* Title:lykAction.java
* Description: lykAction文件:用于实现分页、记录删除、编辑、更新、连接等功能
* Copyright: Copyright (c) 2003/12/06
* Company: hongyang
* Author : linsr
* Version 2.0
*/
import strutstest.lykDAO;import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.util.ModuleException;
import org.apache.struts.util.MessageResources;import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import javax.sql.DataSource;
public final class lykAction extends Action {
  //定义变量
  DataSource dataSource;
  Connection con;
  private Log log = LogFactory.getLog("org.apache.struts.webapp.Example");
  //private SimpleConnetionPool pool;
  public lykAction(){
  }  //函数定义:
  public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
    {
        // Extract attributes and parameters we will need        Locale locale = getLocale(request);
        MessageResources messages = getResources(request);
        HttpSession session = request.getSession();
        lykForm m_lykForm = (lykForm) form;        try{
          //用于连接数据库,具体在struts-config.xml中配置
          dataSource = getDataSource(request);
          con = dataSource.getConnection();
          lykDAO m_lykDAO = new lykDAO(con);
          String action=request.getParameter("action");
          if(action==null)action="find";
          if(action.equals("delete"))
          {
            String expression=request.getParameter("expression");
            m_lykDAO.removeID(expression);
          }
          if(action.equals("update"))
          {
            String expression=request.getParameter("expression");
            lyk m_lyk= new lyk();
            //<update>
            m_lyk.setUser_id(m_lykForm.getUser_id());
            m_lyk.setPassword(m_lykForm.getPassword());
            m_lyk.setName(m_lykForm.getName());
            m_lyk.setDescription(m_lykForm.getDescription());
            m_lyk.setWeb_site(m_lykForm.getWeb_site());
            m_lyk.setAddress(m_lykForm.getAddress());
                        //</update>                      m_lykDAO.update(m_lyk,expression);
                  }
                  ///////////////
                      //<sqlstr>
                      String sql="SELECT * FROM dbo.attraction";
                      //</sqlstr>
                      Collection col = m_lykDAO.findSQL(sql);
                      request.setAttribute("lyk",col);              //<分页>
                      m_lykForm.setRowCount(col.size());
                      m_lykForm.setLength(5);//设置每页显示记录数                      String page=request.getParameter("page");
                      int ipage;
                      try
                      {
                          ipage=java.lang.Integer.parseInt(page,10);
                      }
                      catch (Exception e)
            {
                ipage=m_lykForm.getPage();
            }
                      m_lykForm.setPage(ipage);
                      m_lykForm.setOffset(ipage*m_lykForm.getLength());
                      m_lykForm.setPageCount(m_lykForm.getRowCount()/m_lykForm.getLength()+1);                      String strPage="";                      strPage+="共";
                      strPage+=String.valueOf(m_lykForm.getRowCount());
                      strPage+="条记录,共";
                      strPage+=String.valueOf(m_lykForm.getPageCount());
                      strPage+="页,当前是第";
                      strPage+=String.valueOf(ipage+1);
                      strPage+="页,      ";                      int istart,iend;
                      istart=ipage-5;
                      if(istart<0) {istart=0;}
                      iend=istart+10;
                      if(iend>m_lykForm.getPageCount()) {iend=m_lykForm.getPageCount();}
                      istart=iend-10;
                      if(istart<0) {istart=0;}
                      for(int i=istart;i<iend;i++)
                      {
                          strPage+="<a href='lykAction.do?action=find&page=";
                          strPage+=String.valueOf(i);
                          strPage+="'>";
                          strPage+=String.valueOf(i+1);
                          strPage+="</a>";
                          strPage+="  ";
                      }                      m_lykForm.setMybeanvariable1(strPage);
              m_lykForm.setAction(action);
                      request.setAttribute("lykForm",m_lykForm);
              //</分页>                      return mapping.findForward("success");
           }
        catch (Exception e)
        {
                      e.printStackTrace();
                      throw new RuntimeException("Unable to get connection.");
            }
        finally
        {
                  try
             {
                if (con != null)
                  con.close();
                   }
             catch (SQLException e)
             {
                throw new RuntimeException(e.getMessage());
                   }
       }    }}

解决方案 »

  1.   

    lykForm是否已经定义并编译成class文件放在类路径中?
      

  2.   

    年终太忙了,这几天没多少时间上网,但看到你的问题,不得不出来分析一下,但也不一定对。
    1、你是否直接运行:“http://localhost:8080/strutstest/lykOUT.jsp”,如果是这样就会出现“javax.servlet.ServletException: Cannot find bean lykForm in any scope”的提示,因为lykOUT.jsp中的lykForm没有数据来源。应运行:“http://localhost:8080/strutstest/lykAction.do“.2、你的lykForm.java文件在那里?上面好像没有。当然,如果没有lykForm.java文件,编译lykAction.java等文件是通不过的。3、上述代码好像是JSPStudio自动产生的代码,如果是用JSPStudio开发,出上述问题的可能会少一些,因为所有的代码是自动产生的,所有的配置也是自动完成的。如果不是用JSPStudio,那么 wafer_w(流浪的风) 说的可能性也是有的,就是class文件存放的目录是否对了、配置是否都对了等。新年了,祝你好运!
      

  3.   

    定义BEAN时换种格式试试!!
    <jsp:useBean id="FeDelivSyousaiInfo" scope="request" class="Fe.JOB.FeDelivSyousaiInfo" />
    id是在ACTION结束是setAttribute的名字
    class是BEAN的具体位置!
      

  4.   

    看看我的做法,好象和你有些出入,特别是JSP这块,这是我项目里的代码,我稍微改一下贴出来给你看,希望对你有帮助!
    我的struts-config.xml文件:
    <struts-config>
      <!-- ========== Form Bean Definitions ================================= -->     
      <form-beans>
        <form-bean name="DelivSyousai"       type="Fe.JOB.FeDelivSyousaiForm"/>
      </form-beans>     <!-- ========== Action Mapping Definitions ============================== -->
    <action-mappings>
        <action path="/Deliv_Syousai"
                type="Fe.JOB.FeDelivSyousaiAction"
                name="DelivSyousai"
                scope="request"
        validate="true"
                input="menudetail.jsp">
          <forward name="success" path="/web/JOB/DelivSyousai.jsp"/>
        </action>
    </action-mappings>
    </struts-config>我的Action文件(只贴出和BEAN有关的部分):
    public ActionForward doAction(ActionMapping mapping,
     ActionForm form, 
     HttpServletRequest request, 
     HttpServletResponse response) 
    throws IOException,ServletException {
         form DelivSyousaiForm = new form();
         request.setAttribute("DelivSyousaiForm",DelivSyousaiForm );我的JSP文件(只贴出和BEAN有关的部分):
    <jsp:useBean id="DelivSyousaiForm " scope="request" class="Fe.JOB.FeDelivSyousaiForm" />
    <!-- 然后就可以使用BEAN里的数据了!-->
    <html:hidden  property="txt_DELIV_CHOICE" value="<%=DelivSyousaiForm.gettxt_DELIV_CHOICE()%>"/>
      

  5.   

    我觉得你的JSP文件中对BEAN的引用可以换成我的方式,用<jsp:useBean语句进行
    还有,你从ACTION出来之前,看一下BEAN里有没有数据,就是在request.setAttribute之前看一下,上个页面的数据是否传过来了.
      

  6.   

    kui把你的struts-config.xml的配置文件拷给我
    [email protected]
      

  7.   

    直接运行:“http://localhost:8080/strutstest/lykOUT.jsp”,如果是这样就会出现“javax.servlet.ServletException: Cannot find bean lykForm in any scope”的提示,因为lykOUT.jsp中的lykForm没有数据来源。应运行:“http://localhost:8080/strutstest/lykAction.do“.
    你看看
      

  8.   

    我把一个完整的由JSPStudio自动生成的Hello程序发结你,包含了你上述所需的数据库连接,分页,记录删除、更新、连接功能,2.1M,希望你的信箱能装得下!如果其它人需要,请到ftp://202.38.86.188/incoming/JSPStudio(20040107版本)zip下载.再次建设,为了少走弯路,还是选择JSPStudio开发Struts项目最好,如果是已经用的旧版本的JSPStudio,也请下载新版本的。
    新增功能有:
    1、在打"."自动提示方面进行了改进,所有的库函数和项目中自己编写的类的函数都能自动提示;
    2、在支持Struts标签的可视化编辑方面进行了完善;
    3、对数据库应用中的表格自动分页方法进行了改进;
    4、支持单片机的C语言(C51)开发和编译;
    5、支持单片机的汇编语言(A51)开发和编译;
    6、增加了双击出错信息自动跳转到错行的功能。
      

  9.   

    我在公司上班,不能用ftp下载。
    能用email给我一份JSPStudio啊,
    [email protected]
      

  10.   

    to  CoLinM(林) :
    JSPStudio压缩后还有100多M,不能用E_mail。但我可以把JSPStudio自动生成的Hello程序发结你,如果你有这样的需求的话。
      

  11.   

    你的jsp写得有问题,struts的jsp中,应该有默认的form存在,就是说应该在:
    <html:html>
    <head>
    <title></title>
    <html:base/>
    </head>
    <body bgcolor="white">
    <html:form action= "action"> 
    引号中的action是你在struts-config.xml里配置的该form提交时所用到的action的名字.
      

  12.   

    你的程序在
    <html:form action>之前就用到了'lykForm' ,这是不行的,要么把<html:form action>这句放到最前面去,要么先用<jsp:userbean将'lykForm'定义一下,不然是不能直接使用的.所以会出现找不到的错误