Связываниезначение свойства bean при отображении другого текста в поле - PullRequest
2 голосов
/ 04 января 2012

Я знаю, что название может звучать абсурдно, но я не знаю, как объяснить, что я имею в виду:)

У меня есть форма, которую я использую для редактирования сущности.Каждое поле связано со связанным свойством bean-компонента и работает нормально.

Что мне нужно сделать, это показать текущие значения сущности в полях формы, чтобы сделать редактирование немного быстрее (имеятекущее значение вместо пустого поля весьма полезно!)

Итак, у меня есть страница edit.xhtml, которая берет идентификатор из параметра get и извлекает сущность, используя метод getFromId в компоненте поддержки.

Предполагая, что эта сущность хранится в переменной, называемой "contact", я хотел бы иметь такую ​​форму:

<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>

, но я хочу показать в поля texf значения значенийcontact var.

Так, например, первый inputText должен показывать «stefano» в качестве имени, но он должен быть связан с contactsMB.name.

По сути, это как значение по умолчанию дляinputText, и это значение по умолчанию должно исходить от сущности.

Возможно ли это?

1 Ответ

2 голосов
/ 04 января 2012

Прежде всего, вы должны спросить себя: Do you really need to do that?.Если вы редактируете сущность, вы должны напрямую использовать методы получения и установки этой сущности.Это может быть что-то вроде этого:

@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
}
...