不好意思,大早上一来就麻烦大家,这个东东折磨了我许久,没办法了~
我做的是一个录入的内容,表单的值用参数可以取到,但是用form却不能得到,可能是我对struts的机制摸的不透,实在是看不出来了,请大家帮帮忙
struts配置文件:
<?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>
<form-beans>
<form-bean name="ResourcesAppForm" type="com.resources.form.ResourcesAppForm" />
</form-beans>
<global-forwards></global-forwards>
<action-mappings>
<action name="ResourcesAppForm" path="/saveInsertResourcesApp" parameter="#" scope="session" type="com.resources.action.ResourcesAppAction">
<forward name="default" path="/resources/resourcesAppList.jsp" contextRelative="true" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>action:
public class ResourcesAppAction extends BaseAction{
public ActionForward saveInsertResourcesApp(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws BaseException {
ResourcesAppForm rform= (ResourcesAppForm)form;
String A1 = rform.getA1(); //action传过来的form内容为空
A1 = request.getParameter("A1").toString(); //在request中用getParameter就可以取到内容,说明form中的值是存在的
return new ActionForward("/ResourcesAppList.do");
}
}jsp:
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="com.util.upload.*"%>
<%@ page import="com.resources.domain.ResourcesAppBean"%>
<%@ page import="com.resources.form.ResourcesAppForm"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<body>
<div id="frame">
<html:form action="/saveInsertResourcesApp.do" method="post" styleId="theForm">
<bean:define id="theForm" name="ResourcesAppForm" />
<div class="tableheadbg">
资产录入
</div>
<table border="0" cellpadding="0" cellspacing="0" class="input_bg">
<tr>
<td class="input_bg" nowrap align="right" width="20%">
分公司:
</td>
<td class="input_bg" align="left" width="30%">
<select name="A1" id="A1">
<option value="30">
安徽
</option>
<option value="31">
上海
</option>
</select>
</td>
</tr>
<tr>
<td class="input_bg" align="center" colspan="4">
<input type="button" class="Button" value="保存" onclick="javascript:save(document.theForm);return false;" />
<input type="button" class="Button" value="返回" onclick="javascript:back();" />
</td>
</tr>
</table> </html:form> </div>
</body>
</html:html>
<script language="javascript">
function save(theForm)
{
document.theForm.action = "/saveInsertResourcesApp.do?A1="+theForm.A1.value;
document.theForm.submit();
}
</script>form:
ResourcesAppForm
package com.resources.form;
import org.apache.struts.action.ActionForm;
public class ResourcesAppForm extends ActionForm{
public String A1; //分公司 public static void main(String[] args) { }
public String getA1() {
return A1;
}
public void setA1(String a1) {
A1 = a1;
}
}
我做的是一个录入的内容,表单的值用参数可以取到,但是用form却不能得到,可能是我对struts的机制摸的不透,实在是看不出来了,请大家帮帮忙
struts配置文件:
<?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>
<form-beans>
<form-bean name="ResourcesAppForm" type="com.resources.form.ResourcesAppForm" />
</form-beans>
<global-forwards></global-forwards>
<action-mappings>
<action name="ResourcesAppForm" path="/saveInsertResourcesApp" parameter="#" scope="session" type="com.resources.action.ResourcesAppAction">
<forward name="default" path="/resources/resourcesAppList.jsp" contextRelative="true" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
</struts-config>action:
public class ResourcesAppAction extends BaseAction{
public ActionForward saveInsertResourcesApp(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws BaseException {
ResourcesAppForm rform= (ResourcesAppForm)form;
String A1 = rform.getA1(); //action传过来的form内容为空
A1 = request.getParameter("A1").toString(); //在request中用getParameter就可以取到内容,说明form中的值是存在的
return new ActionForward("/ResourcesAppList.do");
}
}jsp:
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="com.util.upload.*"%>
<%@ page import="com.resources.domain.ResourcesAppBean"%>
<%@ page import="com.resources.form.ResourcesAppForm"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
<body>
<div id="frame">
<html:form action="/saveInsertResourcesApp.do" method="post" styleId="theForm">
<bean:define id="theForm" name="ResourcesAppForm" />
<div class="tableheadbg">
资产录入
</div>
<table border="0" cellpadding="0" cellspacing="0" class="input_bg">
<tr>
<td class="input_bg" nowrap align="right" width="20%">
分公司:
</td>
<td class="input_bg" align="left" width="30%">
<select name="A1" id="A1">
<option value="30">
安徽
</option>
<option value="31">
上海
</option>
</select>
</td>
</tr>
<tr>
<td class="input_bg" align="center" colspan="4">
<input type="button" class="Button" value="保存" onclick="javascript:save(document.theForm);return false;" />
<input type="button" class="Button" value="返回" onclick="javascript:back();" />
</td>
</tr>
</table> </html:form> </div>
</body>
</html:html>
<script language="javascript">
function save(theForm)
{
document.theForm.action = "/saveInsertResourcesApp.do?A1="+theForm.A1.value;
document.theForm.submit();
}
</script>form:
ResourcesAppForm
package com.resources.form;
import org.apache.struts.action.ActionForm;
public class ResourcesAppForm extends ActionForm{
public String A1; //分公司 public static void main(String[] args) { }
public String getA1() {
return A1;
}
public void setA1(String a1) {
A1 = a1;
}
}
把name改成a1试试
应该是继承Action.
因为你的form是直接继承的ActionForm.
应该是private String a1;
而不是public String A1;虽然这样没有多大问题,但是相当不规范。如果我是你经理,肯定会骂死你。
那么就是你JSP页面的问题:你的JSP页面缺少对struts标签库的引用:
<... filter="bean">
<... filter="html">
<... filter="logic">(这个在你的JSP页面中不需要)
struts会从formbean中的get或set方法的方法名中去获取页面对象。
例如你这里的get方法是:
getA1(),那么struts就知道要从页面中找到id或name属性为a1的标签对象。
而我们在formbean中定义的字段,无论是private string a1;还是private string A1,
其对应的get/set方法的方法名中都是:getA1/setA1.
但是struts做的是相反的工作——它是由get/set方法来反向推断私有变量名,而推断的结果都自动转为第一个字母小写,所以……明白了吗?
嘿嘿,我们项目经理一般不去搬着代码看的,他只查功能~
虽然struts用很容易就上手了,但是不了解内部运行原理,出错了还真是不容易查啊~
再次感谢~
附:继承baseAction是公司封装的一个类~