表单代码:
  <s:if test="goodss!=null">
      <s:iterator value="goodss">
   <s:form action="shopcar.action" method="post">
  <tr>
    <td height="98"><img src="photos/<s:property value="%{goodsimag}"/>"
width="113" height="98" alt="" /></td>
    <td><s:property value="goodsname"/></td>
    <td><s:property value="goodsprice"/></td>
    <td><s:property value="num"/></td>
    <td><label>
      <s:textfield size="6" name="num" value="1"></s:textfield>
    </label></td>
    <td><label>
    <s:hidden name="goodsid" value="goodsid"></s:hidden>
<!--     <s:submit name="buygoods" value="立即购买" method="buygoods"></s:submit>-->
      <s:submit value="放入购物车"></s:submit>
    </label></td>
  </tr>
  </s:form>
</s:iterator>
</s:if>struts.xml <action name="shopcar" class="shopcarAction" method="savegoodsincar">
<result name="success">/tip.jsp</result>
<result name="input">/tip.jsp</result>
</action>
调用的action:@Controller
@Scope("prototype")
public class ShopcarAction extends ActionSupport {
@Resource GoodsDAO goodsdaoimpl;
@Resource OrdersDAO ordersdaoimpl;
private Integer goodsid;
private Integer num;
private String tip;
public String getTip() {
return tip;
} public void setTip(String tip) {
this.tip = tip;
} public Integer getGoodsid() {
return goodsid;
} public void setGoodsid(Integer goodsid) {
this.goodsid = goodsid;
} public Integer getNum() {
return num;
} public void setNum(Integer num) {
this.num = num;
}
public String savegoodsincar(){

System.out.println("0000000");
Goods goods=goodsdaoimpl.findById(goodsid);
if(goods.getNum()>num)
{
Buycar buycar=(Buycar)ActionContext.getContext().getSession().get("buycar");
if(buycar==null)
{
buycar=new Buycar();
ActionContext.getContext().getSession().put("buycar", buycar);
}
buycar.additem(new Buyitem(goods,num));
setTip("添加到购物车成功!");
//         ActionContext.getContext().getSession().put("buycar", buycar);
return SUCCESS;
}else
{
setTip("您所购买的数量超过库存数量!");
return INPUT;
}
}
提交表单后 总是直接返回tip页面,没有调用action中定义的方法。
因为后台都没打印System.out.println("0000000");这句话;同学们,帮帮忙。。看看哪里有问题????????谢谢了。。

解决方案 »

  1.   

    页面输入域不对
    检查一下,比如如果页面定义一个日期类型的,你后面用String接,
      

  2.   

    配置文件里面的action名称写错了,注意大小写
      

  3.   

    不懂啊我表单就提交了两个属性<s:textfield size="6" name="num" value="1"></s:textfield>默认值为1
    还有一个<s:hidden name="goodsid" value="goodsid"></s:hidden>
    默认商品的id我action那边用两个integer
    private Integer goodsid;
    private Integer num;
    来接表单的两个属性。不知道为什么action会直接返回input。。action中的方法都没调用到就直接返回了。。好像是有异常才会这样。我第一想到的是数据转换异常,可是不大可能啊。第二感觉有可能是我表单写的有点怪,会不会有异常。麻烦指点一下。
      

  4.   


    这样写是没错的我是用spring的注解管理的。   谢谢了。
      

  5.   

    好像要重写execute方法的吧,要不然就调用ActionSupport默认的的execute方法了,它里面始终return SUCCESS;
      

  6.   


    这样写是没错的我是用spring的注解管理的。 谢谢了。
      

  7.   


    <action name="shopcar" class="shopcarAction" method="savegoodsincar">
    <result name="success">/tip.jsp</result>
    <result name="input">/tip.jsp</result>
    </action>class="shopcarAction"
      好像写错了吧
      

  8.   

    不用重写该方法,因为该方法默认为空,我在配置文件已经指点要调用savegoodsincar()方法了。
    <action name="shopcar" class="shopcarAction" method="savegoodsincar">
      

  9.   


    class没错的。。我是用spring注解管理bean的所以spring默认就是那个名
      

  10.   

    那个配置文件很简单的。。应该没关啦。。要看也可以发来给看看。<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    <context:component-scan base-package="com.shop"/>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/shopcar"></property>
    <property name="username" value="root"></property>
    <property name="password" value=""></property>
    <property name="maxActive" value="100"></property>
    <property name="maxIdle" value="30"></property>
    <property name="maxWait" value="500"></property>
    <property name="defaultAutoCommit" value="true"></property>
    </bean> <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/shop/bean/table/Admin.hbm.xml</value>
    <value>com/shop/bean/table/Goods.hbm.xml</value>
    <value>com/shop/bean/table/Orders.hbm.xml</value>
    <value>com/shop/bean/table/User.hbm.xml</value> </list>
    </property>
    </bean> <bean id="txManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />
    </beans>
      

  11.   

    spring的配置文件里要定义一个bean,id叫做shopcarAction,class=yourpackage.ShopcarAction
      

  12.   

    <result name="success">/tip.jsp</result>
    <result name="input">/tip.jsp</result>这两个jsp都一样想不跳一个地方都难!
      

  13.   


    我郁闷了我用注解管理bean的老大。。
      

  14.   

    后台都没执行System.out.println("0000000");这句话
    说明action 都没被调用到郁闷啊不是跳不跳同一个jsp的问题。。那个是故意让它那样跳的。。
      

  15.   

    {
    setTip("您所购买的数量超过库存数量!");
    return INPUT;
    }你把 这个return 的值 改成 ERROR
    然后将 success、error还有input 分别指向 3个不同的页
    如果还进入input 指向的页
    那说明
    有问题了
      

  16.   

    在action 的前面有那个 @Controller("shopcarAction") 在 structs-xml中才可以用的 要不就必须得用全路径的action 。。
      

  17.   

    <bean id="shopcarAction"
    class="*.ShopcarAction" /> *为包名。spring里面有配?
      

  18.   

    struts.xml
    :<action name="shopcar" class="shopcarAction" method="savegoodsincar">
    <result name="success">/tip.jsp</result>
    <result name="input">/tip.jsp</result>
    </action>表单:
     <s:form action="shopcar.action?method=savegoodsincar" method="post">
      

  19.   

    struts配置
    <struts>
      <package name="DeptAction" extends="sysPackage" namespace="/sys/manage/dept">
        <action name="deptStruts" class="sys-manage-dept-deptAction">
          <result>/WEB-INF/pages/sys/manage/dept/dept_tree_staff_info.jsp</result>
          <result name="error">/WEB-INF/pages/error.jsp</result>
          <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>
    spring配置
    <beans>
      <bean id="sys-manage-dept-deptAction"
          class="com.sys.manage.dept.action.DeptAction" scope="request">
            <property name="deptFacade" ref="sys-manage-dept-deptFacade" />
            <property name="sysmgrlog" ref="sys-log-logFacade" />
            <property name="sysMgrIntf" ref="sys-intf-sysMgrIntf" />
      </bean> 可供参考。
      

  20.   

    public class LframeUrlFilter extends OncePerRequestFilter { Log log = LogFactory.getLog(this.getClass()); private String loginPage;

    private String err404Page;

    private String loginActionPage;

    private String err403Page; private String errorPage;
    /**
     * 获取登陆信息session中的登陆标志。 已知用户登陆有几种情况 
     * 1,用户未登陆  状态:0 
     * 2,用户已登陆   状态:1
     * 3,用户登陆后在另一台机子中又一次登陆 状态:2
     **/
    @Override
    protected void doFilterInternal(HttpServletRequest request,
    HttpServletResponse response, FilterChain filterChain)
    throws ServletException, IOException {
    /**
     * 取得用户登陆标志.当标志为空时设为0
     */
    int loginState = request.getSession().getAttribute(Constants.IS_LOGIN_STATE) == null ? 0 : (Integer) request
     .getSession().getAttribute(Constants.IS_LOGIN_STATE); /**
     * 目前只针对三种URL不做过滤
     * 1直接访问登陆页面
     * 2访问错误页面
     * 3登陆提交action
     */
    //log.info(Constants.IS_LOGIN_STATE +":" + loginState);
    // 在无登陆状态下用户登陆标志为空,跳转至登陆界面
    switch (loginState) {
    case 0: //未登陆
    log.info("用户未登陆,请先登陆.");
    if(request.getServletPath().equals(this.loginPage) || request.getServletPath().equals(this.err403Page)  || request.getServletPath().equals(this.errorPage)  || request.getServletPath().equals(this.err404Page)  || request.getServletPath().equals(this.loginActionPage)){
    filterChain.doFilter(request, response);
    return;
    }
    request.setAttribute("errMsg", "用户未登陆,请先登陆.") ;
    response.sendRedirect(request.getContextPath());
    //request.getRequestDispatcher(this.loginPage).forward(request, response);
    break;
    case 1: //已登陆
    log.info("登陆成功.");
    filterChain.doFilter(request, response);
    break;
    case 2: //强制退出
    log.info("用户已经在其它地方登陆,该帐号强制退出");
    request.getSession().setAttribute(Constants.IS_LOGIN_STATE, 0);
    response.sendRedirect(request.getContextPath()+this.err403Page);
    default:
    break;
    }

    }
      

  21.   

    <s:hidden name="goodsid" value="goodsid"></s:hidden>
    value="<s:property value="goodsid"/>"
      

  22.   

    有一种可能是 action里面出现校验的方法了  直接拦截  但是我的没有校验方法