我使用一个jsp页面(regist.jsp)提交一个form,然后想通过一个action(nameAction.java)将提交的form表单内的“name”信息,在另外一个页面(suc.jsp)中显示。但是,我试了几种方法都不行。其中:各种文件的路径:
nameAction.java  :  com.yourcompany.struts.action
nameForm.java  :  com.yourcompany.struts.form
jsp页面都在根目录下面。
suc.jsp 文件:  <jsp:useBean id="f" class="com.yourcompany.struts.form.nameForm" scope="session"></jsp:useBean>
  <body>
    <jsp:getProperty name = "f" property="name"/>
    <bean:write name="f" property="name"/>
    <%=request.getAttribute("name")%>
  </body>可以跳转成功,但是显示的结果是:
 null null 问:我错在了哪里?为什么我写了三个显示的标签,只有两个有了null,就算取不出来,也应该有三个null吧。

解决方案 »

  1.   

    <bean:write name="f" property="name"/>这条没有任何显示。我查看html源文件 也没有任何显示。
      

  2.   

    三个问题:
    1. 那个bean实例f你确定是防盗了session中?
    2.   <bean:write name="f" property="name"/> 这个标签是什么标签,干什么用的
      如果是给bean赋值,我记得用这个:
    <jsp:setProperty property="" name="" value=""/>
    3.你确定请求是转发过来的吗
      

  3.   

      <jsp:getProperty name = "f" property="name"/>
    这句是获取值吧 你看成赋值了?
     <bean:write name="f" property="name"/>
    这个标签没用过!
    不过你要打印 直接${name.f}
    赋值就
      <jsp:setProperty name = "f" property="name" value="name"/>
      

  4.   

    <bean:write name="" property ="" scope=""/>
    这个是struts的输出javabean的标签。suc.jsp中无需再去set或者get值,直接用这个标签即可。scope可以指定page到application四个范围的任意一个,默认是request另:楼上有人说要把数据放到session中,此不可取。session中要尽量少放数据,原则上只放与用户会话相关的数据。否则服务器端的内存迟早会被耗尽至于你的数据为何不能显示,感觉是你的regist.jsp有问题,把这个jsp代码贴出来。
      

  5.   

    regist.jsp<%@ page language="java" pageEncoding="gb2312"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html:html lang="true">
      <head>
        <html:base />
        
        <title>regist.jsp</title>  </head>
      <body>
      <div><html:errors/></div>
        <html:form action="/r">
          <table border="1">
            <tr>
              <td>请输入名字:<br></td>
              <td><html:text property="name" /><br></td>
            </tr>        <tr>
              <td colspan="2" align="center"><html:submit /><br></td>
            </tr>
          </table>
        </html:form>
      </body>
    </html:html>
      

  6.   

    跳转可以成功。就是显示不了。nameForm.javapackage com.yourcompany.struts.form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;public class nameForm extends ActionForm {
    private String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } //在提交给action之前,如果表单有简单错误,返回错误集合。如果没有就执行相应的action
    public ActionErrors validate(ActionMapping mapping,
    HttpServletRequest request) {

    ActionErrors aes = new ActionErrors();

    if (name == null||name.length() == 0)
    aes.add("formErrors", new ActionMessage("error"));

    if(aes.isEmpty())
    return null;

    return aes;
    }
    }
      

  7.   

    nameAction.javapackage com.yourcompany.struts.action;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.action.ActionMessages;import com.sun.org.apache.xalan.internal.xsltc.runtime.ErrorMessages;
    import com.yourcompany.struts.form.nameForm;public class nameAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    nameForm f = (nameForm)form;

    ActionMessages messages = new ActionMessages();
    if(f.getName().equals("yzl"))
    {
    messages.add("actionerror", new ActionMessage("actionError"));
    this.saveErrors(request, messages);
    return mapping.getInputForward();
    }

    return mapping.findForward("suc");
    }}
      

  8.   

    我晕.
      像你那种动态指令标签我们都没怎么用过.应为我们都不用这种标签
      在struts-config配置文件的<action-mapping><action attribute="名称随便定义,假设为name">
      如果你要在成功页面获得regist.jsp提交过来的值,你就用${name.name}获得,后面的name是你   nameForm中的属性值,如果你的nameForm是DynaActionForm的话就要用${map.name}来获得了
      鄙人建议不要用动态指令标签了.
      呵呵..
      

  9.   

    10楼说的方法可行!谢谢!用EL表达式可以显示,但是其他的动态标签:
    <jsp:getProperty name = "f" property="name"/> 
    <%=request.getAttribute("name")%>
         显示的null
    <bean:write name="f" property="name"/> 
         显示的是 什么也没有,null都不显示。
      

  10.   

    suc.jsp 文件修改下:  <body>
      <html:form action="/r"> 
        <bean:write name="f" property="name"/>
      </html:form> 
      </body>