編集4
私がやりたかったのは、forgotPasswordページを実装することです。例として、以下の例を取り上げましたが、セッションスコープでユーザー名を保持するのは実際のユーザー関連の質問ではありません。
index.xhtml
ユーザー名を入力するforgotPasswordページになります。ユーザー名を入力した後、クリックWelcome Me - Action
してchkMe()
、そのユーザーを確認し、そのユーザーの電子メールIDとwelcome.xhtmlで新しいパスワードを送信しますHi User ABC, we have sent new password at asdfasdf@dasf.com
。
メインポスト
2つのケースで1つのBeanから別のBeanにデータを印刷しようとしています。以下は私が持っているコードです。
index.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body>
<h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
<h:form>
<h:inputText value="#{helloBean.name}"></h:inputText>
<h:commandButton value="Welcome Me - Plain" action="welcome"></h:commandButton>
<h:commandButton value="Welcome Me - Action" action="#{helloBean.chkMe()}"></h:commandButton>
</h:form>
</h:body>
</html>
welcome.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
<h:body bgcolor="white">
<h3>JSF 2.0 Hello World Example - welcome.xhtml</h3>
<h4>Welcome --#{helloBean.name}--</h4>
</h:body>
</html>
HelloBean.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class HelloBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String chkMe() {
return takeMeToAnotherPage("welcome");
}
public String takeMeToAnotherPage(String linkToGo) {
return linkToGo + "?faces-redirect=true";
}
}
Checking
textfieldのようにテキストを入力してボタンをクリックすると、welcome.xhtmlにテキストがWelcome Me - Plain
テキストとして表示されますが、をクリックするとテキストが表示されません(として表示されます)Welcome --Checking--
Welcome Me - Action
Welcome ----
なぜこれが起こっているのか分かりません。
これが起こっている理由のアイデア/提案。
編集1
これはすべて原因だと?faces-redirect=true
思いますが、使用しないかのように使用する必要が?faces-redirect=true
あります。アドレスバーのURLは以前のURLです。
たとえば、page1.xhtmlを使用してpage2.xhtmlにアクセスした場合でも、URLにはpage1.xhtmlと表示されます。
したがって、そのような場合に何をすべきかわからない。
編集2
さて、私が実際にやりたいのは、index.xhtmlにユーザー名を入力するforgotPasswordページです(上記の例を考慮)。そのユーザー名が正しい場合は、welcome.xhtmlにHi User ABC, Please use new password for next login. We have sent you email at blah@blah.com
。
RequestScopeは完全に機能していましたが、問題はURLアドレスにあるため、を追加しまし?faces-redirect=true
た。しかし、リダイレクトとして、httpセッションが閉じているため、welcome.xhtmlでは、値が取得されません(これが上記で発生していることです)。
からの別の解決策はFlashScopeskuntsel
を使用することでしたが、ここでも問題は、welcome.xhtmlを更新すると、データが失われ、私を夢中にさせることです。
誰かが何をする必要があるかについて提案できますか?
編集3
セッションスコープの問題は以下のとおりです。
2つのタブを開き、両方のタブにindex.xhtmlがあるとします。tab1で、入力Fahim
してクリックしWelcome Me - Action
ました。tab1に、welcome.xhtmlが表示され、テキストがとして表示されWelcome Fahim
ます。これは完璧です。
次に、tab2に移動し、名前を「」と入力し、 「welcome.xhtml」XYZ
をクリックすると、テキストが「」と表示されます。これも完璧です。Welcome Me - Action
Welcome XYZ
問題は、tab1に戻ってページを更新するときです。tab1(welcome.xhtml)を更新するとWelcome XYZ
、以前と同じようにどちらが間違っているかがわかりWelcome Fahim
ますWelcome Fahim
。