我是Tapestry的新手,只是创建我的第一个应用程序。
我有一个表单,我正在创建一个“对象”,由另外两个对象Customer和Country组成。
<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个属性,country和customer定义为具有相应getter和setter的字符串。
private String aCustomer; private String aCountry;
我的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应该具有对象而不是像客户和国家这样的字符串吗? 我的编码器错了还是还有别的。如果我尝试只使用原始字符串而不是需要编码器的对象,则提交值。
欢迎所有帮助和评论!
答案 0 :(得分:0)
我无法“评论”你的问题,问你一些事情(我想可能是我没有声誉!),但你的情况不明确所以我认为这可能会有所帮助。你应该照顾两件事:
初始化您的anewobject及其关联对象(客户和国家/地区)的表格准备活动,其中包含了beaneditor。
@OnEvent(组分= “您的形式-ID”,值= EventConstants.PREPARE)
5.4之前的Tapestry5版本(http://tapestry.apache.org/release-notes-54.html)实现了post post机制之后的重定向,因此您丢失了请求数据,因此您需要 @坚持一些页面变量,以便在一个表单提交和响应之间保持其价值!