2011-08-04 1 views
4

나는 새 사용자를 추가하거나 사용자를 업데이트하기위한 양식이 표시된 경우이를 표시하는 jsp를 내보기로 사용합니다. 사용자가 선택되면 양식을 미리 채우는 방법을 알 수 없습니다. 같은 양식으로 2 가지 작업을 사용하는 솔루션에 대해 읽었으며 그 중 하나는 필드를 채우는 데 사용되고 데이터는 제출하는 데 사용됩니다. 그러나 jsp를로드 할 때 내 액션 (양식의 작업 속성에 정의 된 액션)이 호출되지 않기 때문에이 기능은 실제로 작동하지 않습니다. 메뉴 및 페이지는 XML 파일). 내 jsp에서 두 번째 작업을 지정하는 방법과 jsp를 처음로드 할 때 작업이 호출되도록하는 방법을 이해할 수 없습니다. 가능한 경우 AJAX와 관련없는 해결책을 선호합니다. 감사.Struts1에 양식 미리 채우기

답변

8

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"); 
     } 

    } 

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 MyFormSuccessAction extends Action{ 

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

} 

스트럿-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> 

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"로 채워집니다 호출합니다. 더 이상의 연관성이 필요하면 의견을 말하면 기꺼이 도와 드리겠습니다. 감사!

+3

이 코드는 Struts 1에서 사용자가 이름을 가진 양식을 얻는 순간 악몽처럼 보입니다. ( –

+0

@tusar : 여러 페이지 양식에 문제가 있습니다. (편집 모드에서) 사용자가 변경 한 사항을 고려하지 않고 양식을 다시 채우는 버튼을 클릭하면됩니다. – Sefran2

+0

@Cricket, 안녕하세요! 브라우저에서 캐싱으로 인해 문제가 발생하고 있습니다. 사용 중지 할 수있는 해킹이 있습니다. 브라우저에서 캐싱 (캐시 용 응답 헤더 설정 등) – tusar

0

여기가 이어야합니다.은 사용자를 선택할 때 호출되는 작업입니다. 액션을 앞으로 돌려 보내기 전에 해당 사용자의 속성을 액션 폼에 복사해야합니다.

구성 정보가 없으면 그 이상으로 도울 수 없습니다.