この Bean はアプリケーション スコープにあります。
public class User {
private UICommand link;
private String name;
public User(){
System.out.println("User.User()");
name = "Test Link";
}
public UICommand getLink() {
System.out.println("User.getLink()");
System.out.println(link==null?"link is null":"link is not null");
return link;
}
public void setLink(UICommand link) {
System.out.println("User.setLink()");
this.link = link;
System.out.println("link: "+link.toString());
}
public void change(){
System.out.println("User.change()");
}
//setter and getter for name
}
私はjspページにこのjsfを持っています。
<f:view>
<h:form>
<h:commandLink binding="#{user.link}" action="#{user.change}" value="#{user.name}"/>
</h:form>
</f:view>
UICommand オブジェクトは (オブジェクトのシリアル化された状態を HTML 出力と共に送信することにより) 再利用され、状態とバインディングが維持されると考えました。しかし、私はこのsysoutputを取得します。
//When page loads
User.User()
User.getLink()
link is null
User.setLink()
link: javax.faces.component.html.HtmlCommandLink@14e4ce7
//when user clicks the link
User.setLink()
link: javax.faces.component.html.HtmlCommandLink@6fcc9c
User.change()
UICommand
オブジェクトは、ユーザーがリンクをクリックするたびに異なります!!! またgetLink()
、そのオブジェクトが最初にページにロードされたときに一度だけ実行されると思いますが、その場合、ページは最新の UICommand オブジェクトを反映しません!