0

我是挂毯的新手,刚刚创建了我的第一个应用程序。

我有一个表单,我正在创建一个由其他 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>

在我的 javaclass 我有

   @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 个属性,国家和客户定义为具有相应 getter 和 setter 的字符串。

私人字符串 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 这样的字符串吗?是我的编码器错误还是有其他问题。如果我尝试使用原始字符串而不是需要编码器的对象,则提交值。

欢迎所有帮助和评论!

4

1 回答 1

0

我无法对您的问题“发表评论”以向您询问一些事情(我想可能是我没有足够的声誉!),但是您的情况尚不清楚,因此我认为这可能会有所帮助。你应该注意两件事:

  1. 在包含 beaneditor 的表单的准备事件中初始化您的新对象及其关联对象(客户和国家/地区)。

    @OnEvent(component="your-form-id",value=EventConstants.PREPARE)

  2. 5.4 之前的 Tapestry5 版本 (http://tapestry.apache.org/release-notes-54.html) 实现了 post 后重定向机制,因此您丢失了请求数据,因此您需要@Persist一些页面变量以保留它们即使是一个表单提交和它的响应之间的值!

于 2012-05-25T17:35:06.280 回答