-1

Struts2 を使用して 1 つのフォームと複数の入力 [Name,City,Country] のセッションを維持する方法を知る必要があり、最終的にデータは休止状態を使用してデータベースに保存されます。

このフォームには 2 つのボタンがあります。

  • 追加 (セッションに保存);
  • 送信 (データベースに保存)。
  • まず、フォームの詳細 [都市名と国名] を入力し、[追加] ボタンをクリックします。データはセッションに保存されます。

  • 次に、同じ詳細を入力し、[追加] をクリックします。

  • 3 番目に、同じフォームの詳細を入力しますが、送信ボタンをクリックすると、すべての詳細 (最初の 2 番目と 3 番目) が休止状態を使用してデータベースに保存されます。

plsは私が問題を解決するのを手伝ってくれます...

Person.java :

 @Entity
    public class Person {
        @Id
        @GeneratedValue
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }  

PersonAction.java:

public class PersonAction extends ActionSupport implements SessionAware {

      private Person person = new Person();
     // Database base=new Database();

      public Person getPerson() {
        return person;
      }

      public void setPerson(Person person){
        this.person = person;
      }

      private Map<String, Object> session;

      public void setSession(Map<String, Object> session){
        this.session = session;
      }

      public String execute() { //Create persons
        List<Person> personList = (List<Person>) session.get("personList");
        for (Person p : personList)
        Database.saveData(this);
        personList.clear();
        return SUCCESS;
      }

      public String add() { //Add person
        List<Person> personList = (List<Person>) session.get("personList");
        if (personList == null) {
          personList = new ArrayList<Person>();
          session.put("personList", personList);
          System.out.println("Successfully added");
        }
        personList.add(person);
        return SUCCESS;

      }

    } 

データベース.java:

public class Database {
public static int saveData(PersonAction personAction){
        SessionFactory sf=new AnnotationConfiguration().configure().buildSessionFactory();
        Session session=sf.openSession();
        Transaction tran=session.beginTransaction();
    int i=(Integer)session.save(personAction);
    tran.commit();
    session.close();
    return i;

    }
}   

struts.xml:

<struts>
    <package name="default" extends="struts-default">
        <action name="person" class="org.PersonAction">
            <result>/person.jsp</result>
        </action>
        <action name="person" class="org.PersonAction" method="add">
            <result>/person.jsp</result>
        </action>
    </package>
</struts> 

index.jsp:

<s:form action="person">
    <s:textfield label="Enter your name" name="name"/>
    <s:submit value="Add person" method="add"/>
    <s:submit value="Create persons"/>
</s:form> 

person.jsp:

<body>
<s:property value="#session.name"/>
</body>
4

3 に答える 3

1

まず、SessionAware を使用する場合のベスト プラクティスをお読みください。

Struts2 に従うMVC pattern(またはこのパターンのバリエーション) ヒントを提供します。したがって、プレゼンテーション層があり、そこでコントローラー (PersonAction) にイベントを送信し、ここでモデル (ビジネス層データベース、人) と通信する必要があります。モデルはコントローラーに何かを返すかどうかを示し、コントローラーは何を表示するかを決定します。 .

あなたの問題は、あなたがに送信PersonActionしていることです.hibernateにマップされDataBase ているものを送信する必要がありますPerson:)。また、同時アプリケーションにいる場合、多くのユーザーがそのメソッドにアクセスするため、静的メソッドを使用しないようにしてください。saveData

これは悪いです

 for (Person p : personList)
            Database.saveData(this);

あなたはこのようなことをしなければなりません

Database.saveData(personList);

そしてデータベースクラスでメソッドを定義します

public static int saveData(List<Person> person)

また、Personクラスでは name プロパティをマップする必要があります

: このような場合に静的メソッドを使用することはお勧めしません

于 2013-06-12T04:24:35.380 に答える
0

次のように SessionFactory を構築します。

sessionFactory = new Configuration().configure().buildSessionFactory();
于 2013-06-12T04:36:58.433 に答える
0

アクションクラスで次のメソッドを使用します

/**
     * Convenience method to get the request.
     * @return current request
     */
    protected HttpServletRequest getRequest() {
    return ServletActionContext.getRequest();
    }

    /**
     * Convenience method to get the response.
     * @return current response.
     */
    protected HttpServletResponse getResponse() {
    return ServletActionContext.getResponse();
    }

    /**
     * Convenience method to get the session. This will create a session if one
     * doesn't exist.
     * @return the session from the request (request.getSession()).
     */
    protected HttpSession getSession() {
    return getRequest().getSession();
    }

そして、uはexecuteメソッド内でこのコードを使用できます

 getRequest().getSession().setAttribute("projectData", scheduleData);
于 2013-06-12T04:23:26.430 に答える