首页 文章

将<h:inputText>值绑定到bean属性,同时在字段中显示不同的文本

提问于
浏览
2

我知道 Headers 可能听起来很荒谬,但我不知道要解释我的意思:)

我有一个用于编辑实体的表单 . 每个字段都链接到其相关的bean属性,它工作正常 .

我需要做的是在表单字段中显示实体的当前值,以便使编辑更快一些(使用当前值而不是空字段非常有用!)

所以我有了这个edit.xhtml页面,它从get参数中获取ID,并使用辅助bean中的getFromId方法检索实体 .

假设这个实体存储在名为“contact”的var中,我想要这个形式:

<f:view>
        <h:form>
            <h1><h:outputText value="Edit"/></h1>
            <h:panelGrid columns="2">
                <h:outputLabel value="Name:" for="name" />
                <h:inputText id="name" value="#{contactsMB.name}" title="Name" required="true"/>
                <h:outputLabel value="Surname:" for="surname" />
                <h:inputText id="surname" value="#{contactsMB.surname}" title="Cognome"/>
                <h:outputLabel value="Email:" for="email" />
                <h:inputText id="email" value="#{contactsMB.email}" title="Email" required="true"/>
                <h:outputLabel value="Number:" for="number" />
                <h:inputText id="number" value="#{contactsMB.number}" title="Number" />
                <h:inputHidden id="id" value="#{contactsMB.id}"/>
                <h:commandButton value="Edit" action="#{contactsMB.editContact}"/>
            </h:panelGrid>
        </h:form>
    </f:view>

但我想在texfields中显示contact var的值 .

因此,例如,第一个inputText必须显示“stefano”作为名称,但必须链接到contactsMB.name .

基本上它就像inputText的默认值一样,这个默认值必须来自一个实体 .

那可能吗?

1 回答

  • 2

    首先,你应该问自己: Do you really need to do that? . 如果您正在编辑实体,则应直接利用getter作为该实体的setter . 它可能是这样的:

    @ManagedBean
    @ViewScoped
    public void ContactsMB {
    
       @EJB
       private SomeEJB someEJB;
       @ManagedProperty(value = "#{param.username}")
       private String username;
       private User   user;
    
       @PostConstruct
       public void prepareEditing() {
          this.user = someEJB.loadUserFromDatabase(username);
       }
    
       // Getters and Setters
    }
    

    然后,您可以,例如,显示用户的名称,如下所示:

    <h:outputLabel value="Name:" for="name" />
    <h:inputText id="name" value="#{contactsMB.user.name}" />
    

    以上 <h:inputText> 将显示用户的当前名称作为默认值 . 当您输入新名称并提交时, User 实体将直接更新 .

    如果你真的想按照你的解释那样做,你可以将 @PostConstruct 方法更改为:

    @ManagedBean
    @ViewScoped
    public void ContactsMB {
    
       @EJB
       private SomeEJB someEJB;
       @ManagedProperty(value = "#{param.username}")
       private String username;
       private User   user;
    
       private String name;
       private String email;
    
       @PostConstruct
       public void prepareEditing() {
          this.user  = someEJB.loadUserFromDatabase(username);
          this.name  = user.getName();
          this.email = user.getEmail();
       }
    
       // Getters and Setters
    }
    

相关问题