2011-08-04 6 views
4

私はjspをビューとして持っています。新しいユーザーを追加するためのフォームが表示されます。ユーザーが選択された場合、フォームを事前入力する方法を理解できません。私は、2つのアクションを使って、同じフォームを使って解決策を読んでいます。そのうちの1つは、フィールドにデータを入力するためだけに使用され、データを送信するためにのみ使用されます。 しかし、jspをロードするときにアクション(フォームのアクション属性で定義されているアクション)が呼び出されないので、これは私のためには機能しません(メニューとページはxmlファイル)。私は自分のJSPで2番目のアクションを指定する方法と、最初に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をあなたがhome.doアクションを呼び出し

<%@ 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> 

毎回は、のfullNameプロパティが"tusar"が移入されます。それ以上の関連が必要な場合は、私がお手伝いいたします。ありがとう!

+3

このコードは、なぜ人々がStruts 1からチャンスを得た直後に移動したのかを思い出させます。つまり、悪夢なのですが、ユーザーの名前でフォームを取得するだけです:( –

+0

@tusar:複数ページ形式の問題があります(編集モードで)ユーザーが行った変更を考慮せずにフォームを再ポップするボタンをクリックすると、フォームが表示されます。 – Sefran2

+0

@Cricket、こんにちは!私はあなたのブラウザにキャッシュするためにその問題に取り組んでいると思います。 – tusar

0

そこにする必要があります。は、ユーザーを選択するときに呼び出されるアクションです。アクションを前方に返す前に、そのユーザーのプロパティをアクションフォームにコピーする必要があります。

設定情報がないと、それ以上に手助けすることは困難です。

関連する問題