こんにちは私は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.javaにuserNameを渡すにはどうすればよいですか?
注:セッションへの保存は推奨されるオプションではありませんが、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" />
しかし、それは機能していません....
私がここでどんな間違いをしているのか知っていますか?