Свойства компонента Tapestry не устанавливаются при использовании ValueEncoders

Я новичок в гобелене, просто создаю свое первое приложение.

У меня есть форма, в которой я создаю "Объект", состоящий из 2 других объектов: Клиент и Страна.

 <t:beaneditform t:id="createMyObject" t:object="anewobject" rt:submitlabel="Create Object">
        <p:customer>
            <t:label for="Customer"/>
            <t:select t:id="customer" value="aCustomer" model="aCustomerSelectModel" encoder="customerEncoder"/>
        </p:customer>
        <p:country>
            <t:label for="Country"/>
            <t:select t:id="country" value="aCountry" model="aCountrySelectModel" encoder="countryEncoder"/>
        </p:country>

В моем яваклассе

   @Property
   private Customer aCustomer;
   @Property
   private Country aCountry;

   @Property
   private ObjectBean aNewObject;

   public New()
   {
      // create a SelectModel from the list of customers
      aCustomerSelectModel = aSelectModelFactory.create(aCustomers, "name");
      aCountrySelectModel = aSelectModelFactory.create(aCountries, "name");
   }

и в моем ObjectBean у меня есть 2 атрибута, страна и клиент, определенные как Строки с соответствующими получателями и установщиками.

частная строка aCustomer; частная строка в стране;

Мой CustomerEncoder выглядит следующим образом

  public class CustomerEncoder implements ValueEncoder<Customer>,  ValueEncoderFactory<Customer>
{
   @Override
   public String toClient(Customer pCustomer)
   {
      // return the given object's ID
      return String.valueOf(pCustomer.getId());
   }

   @Override
   public Customer toValue(String id)
   {
      // find the color object of the given ID in the database

      return new Customer("John", "Smith");
   }

   // let this ValueEncoder also serve as a ValueEncoderFactory
   @Override
   public ValueEncoder<Customer> create(Class<Customer> type)
   {
      return this;
   }


    void onSubmitFromCreateCustomization()
   {
      String vCustomer = aNewObject.getCustomer();
      String vCountry = aNewObject.getCountry();
   }

Когда я создаю новый объект, мой клиент и страна становятся нулевыми. Что я делаю не так, должен ли мой ObjectBean иметь объекты вместо строки, например, Customer и Country? Мой кодировщик не прав или есть что-то еще. Если я пытаюсь использовать только примитивную String вместо Object, который нуждается в Encoders, значение передается.

Любая помощь и комментарии приветствуются!

1 ответ

Я не могу "прокомментировать" ваш вопрос, чтобы спросить вас о некоторых вещах (я думаю, может быть, у меня не было достаточно репутации!), Но ваш сценарий не ясен, так что вот что я думаю, может помочь. Вы должны позаботиться о 2 вещах:

  1. Инициализируйте ваш новый объект и связанные с ним объекты (клиент и страна) в событии подготовки вашей формы, в которое включен beaneditor.

    @OnEvent (компонент ="ваша форма-идентификатор", значение =EventConstants.PREPARE)

  2. В версиях Tapestry5 до 5.4 (http://tapestry.apache.org/release-notes-54.html) реализован механизм перенаправления после публикации, поэтому вы теряете данные вашего запроса и вам необходимо @Persist некоторых переменных вашей страницы, чтобы сохранить их значение между хотя бы одной отправкой формы и ее ответом!

Другие вопросы по тегам