不好意思,大早上一来就麻烦大家,这个东东折磨了我许久,没办法了~
我做的是一个录入的内容,表单的值用参数可以取到,但是用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;
}
}

解决方案 »

  1.   

    <select name="A1" id="A1"> 
    把name改成a1试试
      

  2.   

    你的ResourcesAppAction 怎么继承起BaseAction了?
    应该是继承Action.
    因为你的form是直接继承的ActionForm.
      

  3.   

    另外,你在form中定义变量的方式也很不规范。
    应该是private String a1;
    而不是public String A1;虽然这样没有多大问题,但是相当不规范。如果我是你经理,肯定会骂死你。
      

  4.   

    如果修改了上面的两个错误,如果还不行的话,
    那么就是你JSP页面的问题:你的JSP页面缺少对struts标签库的引用:
    <...  filter="bean">
    <...  filter="html">
    <...  filter="logic">(这个在你的JSP页面中不需要)
      

  5.   

    关于为什么要用a1的问题:struts中页面和formbean中的属性相对应的方法是:
    struts会从formbean中的get或set方法的方法名中去获取页面对象。
    例如你这里的get方法是:
    getA1(),那么struts就知道要从页面中找到id或name属性为a1的标签对象。
    而我们在formbean中定义的字段,无论是private string a1;还是private string A1,
    其对应的get/set方法的方法名中都是:getA1/setA1.
    但是struts做的是相反的工作——它是由get/set方法来反向推断私有变量名,而推断的结果都自动转为第一个字母小写,所以……明白了吗?
      

  6.   

    哦,明白了,讲的太详细了,非常感谢。
    嘿嘿,我们项目经理一般不去搬着代码看的,他只查功能~
    虽然struts用很容易就上手了,但是不了解内部运行原理,出错了还真是不容易查啊~
    再次感谢~
    附:继承baseAction是公司封装的一个类~