【问题标题】:binding objects initialization in JSF [duplicate]JSF中的绑定对象初始化[重复]
【发布时间】:2013-02-08 21:36:57
【问题描述】:

我在应用程序范围内有这个 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 输出一起发送),从而保持状态和绑定。但我得到了这个系统输出。

//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 对象!

【问题讨论】:

  • 你真的需要绑定吗?在我看来,同时使用绑定和值并不是一个好主意。
  • 仅供学习

标签: java jsf


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 2012-01-17
  • 2015-05-07
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2013-02-10
  • 2013-07-23
相关资源
最近更新 更多