gpt4 book ai didi

java - JSF 中的绑定(bind)对象初始化

转载 作者:行者123 更新时间:2023-12-02 07:15:03 25 4
gpt4 key购买 nike

我在应用程序范围内有这个 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 输出),从而维护状态和绑定(bind)。但我得到了这个系统输出。

//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()当该对象首次加载到页面上时仅运行一次,但如果是这种情况,则页面将不会反射(reflect)最新的 UICommand 对象!

最佳答案

不,每次构建/恢复组件树时,您都会获得全新的 UICommand 实例。但这些实例通过 JSF 状态保存机制恢复其状态。

但是您不应该大量使用绑定(bind)。几乎没有充分的理由这样做。如果这样做,请始终使用 bean 的请求范围,否则会遇到问题。

关于java - JSF 中的绑定(bind)对象初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15038237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com