我使用一个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吧。
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实例f你确定是防盗了session中?
2. <bean:write name="f" property="name"/> 这个标签是什么标签,干什么用的
如果是给bean赋值,我记得用这个:
<jsp:setProperty property="" name="" value=""/>
3.你确定请求是转发过来的吗
这句是获取值吧 你看成赋值了?
<bean:write name="f" property="name"/>
这个标签没用过!
不过你要打印 直接${name.f}
赋值就
<jsp:setProperty name = "f" property="name" value="name"/>
这个是struts的输出javabean的标签。suc.jsp中无需再去set或者get值,直接用这个标签即可。scope可以指定page到application四个范围的任意一个,默认是request另:楼上有人说要把数据放到session中,此不可取。session中要尽量少放数据,原则上只放与用户会话相关的数据。否则服务器端的内存迟早会被耗尽至于你的数据为何不能显示,感觉是你的regist.jsp有问题,把这个jsp代码贴出来。
<%@ 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>
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;
}
}
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");
}}
像你那种动态指令标签我们都没怎么用过.应为我们都不用这种标签
在struts-config配置文件的<action-mapping><action attribute="名称随便定义,假设为name">
如果你要在成功页面获得regist.jsp提交过来的值,你就用${name.name}获得,后面的name是你 nameForm中的属性值,如果你的nameForm是DynaActionForm的话就要用${map.name}来获得了
鄙人建议不要用动态指令标签了.
呵呵..
<jsp:getProperty name = "f" property="name"/>
<%=request.getAttribute("name")%>
显示的null
<bean:write name="f" property="name"/>
显示的是 什么也没有,null都不显示。
<html:form action="/r">
<bean:write name="f" property="name"/>
</html:form>
</body>