だから私はこの非常に小さなJSFの例を持っています:
<!DOCTYPE html>
<html xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Index</title>
</h:head>
<h:body>
<h:form>
<h:commandButton action="#{reqScopedBackingBean.foo()}" value="Submit"/>
</h:form>
</h:body>
</html>
foo は以下のように実装されます。
package biz.tugay.jsftags;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@RequestScoped
public class ReqScopedBackingBean {
public String foo() {
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("message", "Success!!");
return "hello?faces-redirect=true";
}
}
そして最終的にhello.xhtml
は次のとおりです。
<!DOCTYPE html>
<html xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Hello</title>
</h:head>
<h:body>
<h:outputText value="#{flash.keep.message}"/>
</h:body>
</html>
上記の例では、[送信] をクリックすると、hello.xhtml にリダイレクトされ、"Success!!" というメッセージが表示されます。テキストは問題ありません。ページを更新すると、以下に示すように keep メソッドを呼び出しているため、メッセージが表示されます。
#{flash.keep.message}
次に、別の例に進みます。
index.xhtml と ReqScopedBackingBean は同じですが、今回の hello.xhtml は次のとおりです。
<!DOCTYPE html>
<html xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Hello</title>
</h:head>
<h:body>
#{otherBean.pullValuesFromFlash()}
<h:outputText value="#{otherBean.message}"/>
</h:body>
</html>
そしてOtherBean.java
、次のとおりです。
@ManagedBean
@RequestScoped
public class OtherBean {
private String message;
public void pullValuesFromFlash() {
final Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.keep("message");
final String message = (String) flash.get("message");
setMessage(message);
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
動作が最初の例と同じになることを期待しています。ただし、hello.xhtml を使用している場合、成功メッセージは表示されません。ただし、次の行をコメントアウトすると:
// flash.keep("message");
メッセージが表示されます (ただし、hello.xhtml を更新しても、最初の例のように成功メッセージは再表示されません)。
私の質問は、ここでの違いは何ですか? どうですか
#{flash.keep.message}
とは異なる
flash.keep("message");
final String message = (String) flash.get("message");
?