2个项目,都是用myecplise自动添加SSH框架所需的包.
项目A只选择添加了spring核心包,项目B是添加了所有spring的包(包括各种依赖的和非依赖的组件所需要的包,也就是非核心包,目前不需要用到的包).在struts中的action中 写下了: request.setAttribute("username","example");
然后在mapping.findForward跳转的页面中用${username} 或者 request.getAttribute("username")想得到保存的参数指"example".
----------------------------
将上面同样的代码,分别置于项目A、B中,得到不同结果:项目A:
得到 "example“项目B:
得到只能得到Null空值。
---------------------------
我怀疑是不是包添加不全(缺少加载EL表达式的包)或者有2个类型一样的包(名字一样,更新程度不一样),但加载时只能加载其中一个。希望大家给我点意见,因为我希望使用项目B中的包进行使用,但如果连EL表达式或者request.getAttribute()方法都用不了的话,就别想继续了。

解决方案 »

  1.   

    比如在跳转后的sucess.jsp页面中,使用${username} 或者 request.getAttribute("username")方法在项目B(我在myecplise中选择添加了SSH所能添加的所有包)中,只能得到Null.
      

  2.   

    EL表达式 好象不要加什么包包吧.
    可能原因
    1, 是否被重定向.
    2, 是否还有代码 将username 中的值重新覆盖为null
      

  3.   

    你跳到success.jsp是不是在<forword redirect="true"/> 啊  如果是 就肯定不能获得值啊。
      

  4.   

    这跟spring包没关系,你用jsp页面就能实现,B中是否禁用的jstl
      

  5.   

    都是一样的代码,2个项目利用完全和不全的包测试,得到不同的结果。
    struts-config.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
      <data-sources />
      <form-beans >
        <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
          <form-property name="username" type="java.lang.String" />
          <form-property name="password" type="java.lang.String" />
        </form-bean>
      </form-beans>  <global-exceptions />
      <global-forwards />
      <action-mappings >
        <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/person"
          scope="request"
          type="com.solon.struts.action.LoginAction" validate="true" parameter="status">
          <forward name="suc" path="/suc_do.jsp"></forward>
          </action>
     </action-mappings>
    <controller
    processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
    </controller>
      <message-resources parameter="com.solon.struts.ApplicationResources" />
       <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
    value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
    </plug-in>
    <plug-in
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"
    value="/WEB-INF/classes/applicationContext.xml" />
    </plug-in>
    </struts-config>
      

  6.   

    LoginAction.java中调用的Login方法.public ActionForward login(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    DynaValidatorForm loginForm = (DynaValidatorForm) form;// TODO Auto-generated method stub
    Person p = new Person();
    p.setUsername(loginForm.getString("username"));
    p.setPassword(loginForm.getString("password"));
    try {
    if(personDao.isLogin(p))
    {
    request.setAttribute("username", p.getUsername());
    return mapping.findForward("suc");
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return mapping.getInputForward();
    }
      

  7.   

    包的问题就是包重复了。jar名字不一样,但是jar下的class目录一样,但.class不一样,而服务器只能加载其中一个jar包。
      

  8.   

    是不是被reset了,validate="true"变成false试下。
      

  9.   

    这可能有几个问题有关:
    不同环境的默认不同,
    要使用EL 表达式的话,必须:
    首先确认导入EL表达式的jar包, 
    其次,是否启用EL表达式,也就是 isELIgnore=false;
    最后,想请问下,页面是否能正常跳转先,还不清楚这个不好说...
      

  10.   

        一样的代码,不同项目下测试(只是lib下的包不同)结果也不一样。
            我也觉得代码应该没有问题吧?有问题的话项目A就不可能得到结果
      

  11.   

    request.setAttribute("username", p.getUsername());增加一句request.setAttribute("usernameXXXXXXXXX", p.getUsername());在那面获取看看,如果能拿到,可以确认中间某个地方覆盖了那个 username 
      

  12.   

    我使用的是MyEclipse 5.5.1GA E3.2.exe,
    实在不行的话,希望有成功经验的人打开myecplise,按你开发的顺序添加SSH支持,然后把你添加支持时选项中需要的包写下来,我参考下,按你的步骤添加支持。
    不用告诉我操作具体步骤!
    只需要告诉我:  比如添加spring支持时,有很多核心包选择,你是全部勾选还是只勾选其中一部分,告诉我它们的名字
    Struts就不用说了,没有选项。只有spring和Hibernate。我打算添加成功后,把它们打包了,以后新建项目后直接覆盖后使用。省的包出错。分不多,谢谢各位。
      

  13.   

    新建了个项目,把源码复制了进去,
    昨晚还能运行的代码,又出问题了。
    提交后action说找不到servlet,404错误。
    配置都没改 ,估计真的是包的问题了。
    想问下添加spring后,再添加hibernate支持时,快完成时最后弹出的窗口问:是否覆盖已经存在的jar包?是选择覆盖还是继续保持?