Forms Struts1中的预填充形式

Forms Struts1中的预填充形式,forms,auto-populate,struts1,Forms,Auto Populate,Struts1,我有一个jsp作为我的视图,它显示一个表单,用于添加新用户/更新用户(如果选择了一个)。如果选择了用户,我不知道如何预填充表单。我阅读了关于使用2个操作的解决方案,使用相同的表单,其中一个用于填充字段,另一个用于提交数据。 但是,这对我来说不起作用,因为在加载jsp时没有调用我的操作(表单的action属性中定义的操作)(也不能真正解释这一点,菜单和页面是在xml文件中定义的)。我不知道如何在jsp中指定第二个操作,以及如何确保在第一次加载jsp时调用该操作。如果可能的话,我更喜欢不涉及AJAX

我有一个jsp作为我的视图,它显示一个表单,用于添加新用户/更新用户(如果选择了一个)。如果选择了用户,我不知道如何预填充表单。我阅读了关于使用2个操作的解决方案,使用相同的表单,其中一个用于填充字段,另一个用于提交数据。
但是,这对我来说不起作用,因为在加载jsp时没有调用我的操作(表单的action属性中定义的操作)(也不能真正解释这一点,菜单和页面是在xml文件中定义的)。我不知道如何在jsp中指定第二个操作,以及如何确保在第一次加载jsp时调用该操作。如果可能的话,我更喜欢不涉及AJAX的解决方案。谢谢。

既然有了Struts的强大功能,为什么还要选择AJAX呢。我有一个简单的例子(经过测试)给你

MyForm.java

    package com.tusar.action;

    import java.io.Serializable;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import javax.servlet.http.HttpServletRequest;

    public class MyForm extends ActionForm implements Serializable{

        private static final long serialVersionUID = 1043346271910809710L;
        private String fullName = null;

        public String getFullName() {
          return fullName;
        }

        public void setFullName(String fullName) {
            this.fullName = fullName;
        }

        /*This method will be called when you press the reset button
              or load the form. You may want to populate the form here also*/

        public void reset(ActionMapping mapping, HttpServletRequest request){
        String reset = (String)request.getAttribute("myForm.reset");
            if ((null != reset)|| ("true".equals(reset))) {
                fullName = null;
            }
        }
    }
MyFormSetupAction.java

    package com.tusar.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;

    public class MyFormSetupAction extends Action{

        /*Set your form-bean properties here*/

        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
            MyForm hwForm = (MyForm) form;
            hwForm.setFullName("tusar");
            return mapping.findForward("success");
        }

    }
package com.tusar.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;

public class MyFormSuccessAction extends Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return mapping.findForward("success");
    }

}
MyFormSuccessAction.java

    package com.tusar.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;

    public class MyFormSetupAction extends Action{

        /*Set your form-bean properties here*/

        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
            MyForm hwForm = (MyForm) form;
            hwForm.setFullName("tusar");
            return mapping.findForward("success");
        }

    }
package com.tusar.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;

public class MyFormSuccessAction extends Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return mapping.findForward("success");
    }

}
struts-config.xml

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <!DOCTYPE struts-config PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
      "http://struts.apache.org/dtds/struts-config_1_3.dtd">

     <struts-config>

     <!-- ==================== Form Bean Definitions -->

     <form-beans>
     <form-bean name="myForm" type="com.tusar.action.MyForm">
     <form-property name="fullName" type="java.lang.String"/>
     </form-bean>

     <!-- ============= Global Forward Definitions -->

     <global-forwards>
     <!-- Default forward to "Welcome" action -->
     <!-- Demonstrates using index.jsp to forward -->
     <forward name="home" path="/home.do"/>
     </global-forwards>

     <!-- ===================== Action Mapping Definitions -->

     <action-mappings>

     <!-- This action will load the form-->

     <action path="/home"
        type="com.tusar.action.MyFormSetupAction"
        name="myForm"
        validate="false"
        input="/WEB-INF/jsp/home.jsp">

        <forward name="success" path="/WEB-INF/jsp/home.jsp" />
     </action>   

     <!-- This action will evalutae the form and pass form data to 
          success page-->

     <action path="/successAction" 
         type="com.tusar.action.MyFormSuccessAction" 
         name="myForm"
         validate="true"
         input="/WEB-INF/jsp/home.jsp">

        <forward name="success" path="/WEB-INF/jsp/success.jsp" />
     </action>

     </action-mappings>

         <!-- ============= Message Resources Definitions -->

     <message-resources parameter="MessageResources" />

     </struts-config>

home.jsp

<%@ 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 prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false"%> 
<html>
<head>
<title>Struts 1</title>
</head>
<body>

    <html:form action="/successAction.do">

    Name:   
    <html:text property="fullName"></html:text>

    <html:submit value="Next"></html:submit>

    <html:reset value="Cancel"></html:reset>

</html:form>

</body>
</html>

支柱1
姓名:
success.jsp

<%@ 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 prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page isELIgnored="false"%>
<html>
<head>
<title>Successful !</title>
</head>
<body>
    <h3>Your details:</h3>

    Name:

    <bean:write name="myForm" property="fullName" />

</body>
</html>

成功的
您的详细信息:
姓名:
每次调用home.do操作时,fullName属性都会填充“tusar”。如果你需要进一步的联系,我很乐意帮助你。谢谢

选择用户时应调用一个操作。在转发操作之前,应将该用户的属性复制到操作窗体中


如果没有任何配置信息,很难提供更多帮助。

这段代码提醒我,为什么人们一有机会就离开Struts 1——真是一场噩梦,只是为了得到一个带有用户名的表单:(@tusar:Firefox上的多页表单存在问题。单击“上一步”按钮重新填充表单,而不考虑用户所做的更改(在编辑模式下)。@Cricket,您好!我认为您遇到了这个问题,因为浏览器中存在缓存。有一些黑客可以禁用浏览器中的缓存(为缓存e.t.c设置响应头)。请将您的问题作为单独的线程发布。@tusar:我设置响应头时没有存储,但这样表单就被清空了。我不明白,因为上次用户输入的值没有缓存。我将提出一个问题。谢谢。