strut1.1以后提供了DynamicForm来处理这个问题,支持动态的设定Form里包含哪些Property看看它的文档把。

解决方案 »

  1.   

    好的,我先看看,谢谢!如果 DynaActionForm 可以的话,100 分就归你了,呵呵……
      

  2.   

    Struts的DynaActionForm 是不能满足你的要求的,DynaActionForm是对ActionForm的继承,它的属性完全通过struts-config.xml定义,而不用去hardcode,极大的减少了编码量,因此DynaActionForm的属性是固定的。如果用Struts的话我想这种情况适合Map-backed ActionForms.
    http://jakarta.apache.org/struts/userGuide/building_controller.html
      

  3.   

    用 Struts 1.1 遇到了问题:JBuilder_8 + Tomcat4.1.12-LE-jdk14(JBuilder自带的)做了一个简单的 JSP + ActionForm/DynaActionForm + Action
    运行总是有错误……
    这是Tomcat启动时的错误:
    -------------------------------
    信息: Initializing Coyote HTTP/1.1 on port 8080
    Starting service Tomcat-Standalone
    Apache Tomcat/4.1.12-LE-jdk14
    HostConfig[localhost]: Deploying configuration descriptor jb--default.xml
    WebappLoader[]: Deploying class repositories to work directory D:\Test\Java\JBuilderProjects\iBusiness\Tomcat\work
    WebappLoader[]: Deploy class files /WEB-INF/classes to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\classes
    WebappLoader[]: Deploy JAR /WEB-INF/lib/commons-beanutils.jar to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\lib\commons-beanutils.jar
    WebappLoader[]: Deploy JAR /WEB-INF/lib/struts.jar to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\lib\struts.jar
    WebappLoader[]: Reloading checks are enabled for this Context
    StandardManager[]: Seeding random number generator class java.security.SecureRandom
    StandardManager[]: Seeding of random number generator has been completed
    StandardContext[]: Servlet  threw load() exception: javax.servlet.ServletException: Error instantiating servlet class org.apache.struts.action.ActionServlet
    javax.servlet.ServletException: Error instantiating servlet class org.apache.struts.action.ActionServlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:901)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:813)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3341)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3534)
    ………………
    ………………这是访问 jsp 页面时出现的错误:(从控制台copy的,不是从IE)
    -------------------------------
    信息: Initializing Coyote HTTP/1.1 on port 8080
    Starting service Tomcat-Standalone
    Apache Tomcat/4.1.12-LE-jdk14
    HostConfig[localhost]: Deploying configuration descriptor jb--default.xml
    WebappLoader[]: Deploying class repositories to work directory D:\Test\Java\JBuilderProjects\iBusiness\Tomcat\work
    WebappLoader[]: Deploy class files /WEB-INF/classes to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\classes
    WebappLoader[]: Deploy JAR /WEB-INF/lib/commons-beanutils.jar to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\lib\commons-beanutils.jar
    WebappLoader[]: Deploy JAR /WEB-INF/lib/struts.jar to D:\Test\Java\JBuilderProjects\iBusiness\defaultroot\WEB-INF\lib\struts.jar
    WebappLoader[]: Reloading checks are enabled for this Context
    StandardManager[]: Seeding random number generator class java.security.SecureRandom
    StandardManager[]: Seeding of random number generator has been completed
    StandardContext[]: Servlet  threw load() exception: javax.servlet.ServletException: Error instantiating servlet class org.apache.struts.action.ActionServlet
    javax.servlet.ServletException: Error instantiating servlet class org.apache.struts.action.ActionServlet
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:901)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:813)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3341)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3534)
    对于第二个错误,去搜索了一下,也没有看到有一个完美的解决方法……唉
      

  4.   

    看了一下相关资料,的确如 crazymens(风)  所说的,DynaActionForm 中的属性在“运行时”是固定不变的,不能达到“运行时的动态属性”的效果
      

  5.   

    除非你动态的生成From类也可以啊
    动态的生成类  然后编译  然后classloader装载 然后实例化或者做一个空的From自己处理表单的提交吧
    别被struts禁锢住
      

  6.   

    Struts提供两种方法实现动态form1 用动态属性建立ActionForm       一个DynaActionForm对象是一个拥有动态属性集合的对象。DynaActionForm扩展了ActionForm,它的用法允许通过在struts-config.xml声明建立一个表单对象,如下:<form-bean name="logonForm"type="org.apache.struts.action.DynaActionForm"><form-property name="username" type="java.lang.String"/><form-property name="password" type="java.lang.String"/></form-bean>    RequestProcessor用和ActionForm相同的方式建立、填充并验证了DynaActionForm,例如,请求对象的参数被以<form-bean>元素中特定的动态属性填充到DynaActionForm;其他的参数简单类似。上文请参考我翻译的文章: 
    http://www.csdn.net/develop/Read_Article.asp?Id=18363
    http://www.csdn.net/develop/Read_Article.asp?Id=18364
    http://www.csdn.net/develop/Read_Article.asp?Id=18365
    http://www.csdn.net/develop/Read_Article.asp?Id=18372
    http://www.csdn.net/develop/Read_Article.asp?Id=18373另一种动态生成属性的方法是:采用Mappublic class testActionForm extends ActionForm {  private final Map values= new HashMap();  public void setValue(String key, Object value) {
             values.put(key, value);
         }     public Object getValue(String key) {
             return values.get(key);
         }
    }jsp叶面内容如下<html:form action="/test.do" method="POST">
    <% for (int i=0; i<10; i++) {
    String name = "value(foo-" + i + ")";%>
    <html:text property="<%=name%>"/><br/>
    <%}
    %><br/>
    <html:submit property="submit" value="Submit"/><br/>
    <html:reset value ="Reset"/>
    </html:form>