在JSF 2.0中访问bean属性

时间:2013-12-31 10:03:50

标签: java jsf jsf-2

我有以下型号代码,我应该使用它。

    public class Client extends User {

    private String userName;

    public Client(String firstName, String lastName, String userName){
        super(firstName, lastName);
        this.userName = userName;
    }

    //getters and setters
}

public abstract class User {
    String firstName;
    String lastName;

   //getters and setters
}

现在我创建了以下bean:

@ManagedBean(name = "client")
@SessionScoped
public class ClientBean implements Serializable {

    private final long serialVersionUID = 1L; 
    private Client client;

    public Client getClient(){
        return client;
    }

    public void setClient(Client client){
        this.client = client;
    }

}

现在我想在xhtml页面中使用这个bean设置客户端的firstName:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <head>
        <title>Register as a client</title>
    </head>
    <body>
        <h:form>
            First Name:<h:inputText value="#{???}"></h:inputText>
            <br/>                  
            <h:commandButton value="Register" action="registered?faces-redirect=true"/>
        </h:form>
    </body>
</html> 

现在我的问题是:如何访问客户端的firstName?我是否应该创建一个代表用户的新bean并在ClientBean中扩展它? (如果是这样,有什么模型代码可以使用?我到处都会有双重代码?)或者在JSF 2.0中有没有其他更简单的方法来实现它?

3 个答案:

答案 0 :(得分:1)

页面需要以下内容才能正确显示姓氏。

- 类User必须具有如下构造函数以及firstname和lastname的getter和setter。

  public User (String firstName, String lastName)

- Client类中用户名的公共getter和setter方法。

- 在ClientBean类中,我建议您将名称更改为clientBean。此外,将getter和setter方法更改为public而不是private。您需要创建一个client类型的对象,并在需要在屏幕上显示客户端对象时将其初始化为某个值。在提供的代码中,您不是要创建对象或为任何名称属性赋予任何值。

- 在JSF页面中,您可以使用"#{clientBean.client.firstName}"

访问这些值

答案 1 :(得分:0)

让getter和setter公开

 public Client getClient(){
        return client;
    }

    public void setClient(Client client){
        this.client = client;
    }

如果您的Clientnull,只需将其实例化即可。

private Client client = new Client();

答案 2 :(得分:0)

如果您希望将数据库中的值保存在数据库中,或者执行其他一些神奇的操作(如调用Web服务),则可以将此方法与托管bean和pojo一起使用。

要访问您编写的第一个名称#{client.client.firstName}确实它看起来有点棒,所以我建议给托管bean另一个名字。

您可以在托管bean中创建pojo的实例:

public class ClientBean implements Serializable {

    private Client client = new Client();
    ...
}

您还可以直接在托管bean中包含名字和姓氏,如果您在某些操作期间创建pojo以保存值,这将是有意义的。

JSF并没有按你的紧身胸衣,而是你可以选择适合自己的方式。

相关问题