4

こんにちは私はStruts2を使用してプロジェクトを構築しています。しかし、開発中に私は多くの問題に直面しています。最大の問題はStruts2のセッション管理です。これに関連する情報は非常に限られています。

私は自分の問題の解決策を探していますが、私のニーズを満たさない限られた情報しか得られませんでした。

コンテナのセッション(Apache Tomcat 7)は、複数のユーザーがアプリケーションを使用しようとするとオーバーヘッドになるため、使用したくありません。

2つのアクションクラスと2つのJSPを作成しました。JSP1に入力された値(Login.jspおよびLoginAction.java POJO)は、別のアクション(HomeAction.java POJO)で使用され、後で後続のJSP(Home.jsp)に表示されます。

私もタイルを使っています。

タグを使ってみましたが、値を設定できません。

Struts2で、JSP1/アクション上のオブジェクトを別のアクション/JSP2に渡すにはどうすればよいですか?

小さなログインページの例をいただければ幸いです。たとえば、テキストフィールドに入力されたユーザー名は、2つの異なるアクションクラスを使用して別のJSPページに表示される必要があります。

struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.custom.i18n.resources" value="ApplicationResources" /> 

    <package name="default" extends="struts-default">
        <result-types>
            <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types> 

        <action name="login" class="org.myaction.LoginAction" method="validateLoginCredentials">
            <result name="autheticatedUser" type="redirect" >homePage</result>
            <result name="fail" >/jsp/Login.jsp</result>
        </action>

        <action name="homePage" class="org.myaction.HomeAction" method="execute">
            <result name="responseOK" type="tiles" >/tile.NextPage</result>
            <result name="error" type="tiles" >/tile.HomePage</result>
        </action>
    </package>
</struts>

LoginAction.java

    public class LoginAction extends ActionSupport {

    //private static final String SUCCESS = "success"; 
    private static final String FAIL = "fail";

    private String userName;
    private String password;

    public String getUserName() { return userName; }

    public void setUserName(String userName) { this.userName = userName; }

    public String getPassword() { return password; }

    public void setPassword(String password) { this.password = password; }

    public String validateLoginCredentials() {

          if(this.userName.equals("admin") 
                      && this.password.equals("allow")) {

         return "autheticatedUser";
              }
        addActionError(getText("error.login"));
        return FAIL;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <display-name>Login</display-name>

    <context-param>
        <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
        <param-value>/WEB-INF/tiles.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>/jsp/Login.jsp</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

私の質問は、Struts2で、login.jsp/LoginAction.javaからHome.jsp/HomeAction.javauserNameを渡すにはどうすればよいですか?

注:セッションへの保存は推奨されるオプションではありませんが、Struts2でユーザー状態を維持する他の方法がない場合に使用できます。

小さなログインページの例をいただければ幸いです。たとえば、テキストフィールドに入力されたユーザー名は、2つの異なるアクションクラスを使用して別のJSPページに表示される必要があります。

編集済み

こんにちは、ありがとう!お返事ありがとうございます。これでうまくいくと思います。私が言及するのを忘れたもう一つのことがあります。別のクラス(JavaBean)プロパティがLoginAction.javaクラスに存在します。

public class LoginAction extends ActionSupport {

   private UserData userData;

   public void setUserData(UserData userData) {
      this.userData = userData;
   }

   public String getUserData() {
      return userData;
   }

}

UserData.java

public class UserData {
   private String userName;

   public void setUserName(String userName) {
      this.userName = userName;
   }

   public String getUserName() {
      return userName;
   }
}

LoginAction.javaにあるUserDataオブジェクトのuserNameプロパティを設定するにはどうすればよいですか?

私はこれを試しました

<s:hidden name="userData.userName" value="userName" />

しかし、それは機能していません....

私がここでどんな間違いをしているのか知っていますか?

4

2 に答える 2

6

redirectAction一緒に使うparam

  <action name="login" class="org.myaction.LoginAction" method="validateLoginCredentials">
      <result name="autheticatedUser" type="redirectAction">
        <param name="actionName">homePage</param>
        <param name="userName">${userName}</param>
      </result>
      <result name="fail" >/jsp/Login.jsp</result>
  </action> 

また、クラスに userName getter/setter を追加することを忘れないでください。HomeAction次に、Home.jsp直接使用できます<s:property value="userName"/>(または何でも)

于 2012-05-08T09:32:23.840 に答える
0

これconversation pluginはセッションの優れたラッパーであり、アクション間のオブジェクトの存続時間を管理するために使用できます。( https://code.google.com/p/struts2-conversation/ )

このソリューションは、いくつかのステップ ベース jsp ページ (2 つ以上のステップ) がある場合に非常に役立ちます。のプラグインは注釈ベースであり、必要な jsp タグも含まれています

于 2016-06-20T11:53:00.910 に答える