浏览 4290 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-10-16
<component id="inputBigDecimal" type="TextField"> <binding name="value" value="visit.bigDecimalValue"/> <binding name="translator" value="translator:number,pattern=#.#"/> <binding name="validators" value="validators:required,min=2,max=100.123456234563456734563456356734567456784567456784567845675678456785678"/> <binding name="displayName" value="literal:Big Decimal Field"/> </component> 但是我没有 visit类,或者不想创建一个 visit类,所以我定义了一个 Bean,如下: <bean name="bigDice" class="java.math.BigDecimal"> <set name="var" value="new java.lang.String('1');"/> </bean> 然后使用它: <component id="testf" type="TextField"> <binding name="value" value="clientScriptingEnabled"/> <binding name="value" value="bean:bigDice"/> <binding name="translator" value="translator:number,pattern=#.#"/> <binding name="validators" value="validators:required,min=2,max=100.123456234563456734563456356734567456784567456784567845675678456785678"/> <binding name="displayName" value="literal:Big Decimal Field"/> </component> 但是的到了Exception: Unable to instantiate bean 'bigDice' (for component logon); as class java.math.BigDecimal: java.math.BigDecimal component: $Logon_812@b05e0f[logon] location: context:/html/logon.page, line 26, column 52 21 <binding name="validator" value="bean:testValidator"/> 22 <binding name="displayName" value="literal:test"/> 23 </component> 24 25 <bean name="bigDice" class="java.math.BigDecimal"> 26 <set name="var" value="new java.lang.String('1');"/> 27 </bean> 28 29 <component id="testf" type="TextField"> 30 <binding name="value" value="clientScriptingEnabled"/> 31 <binding name="value" value="bean:bigDice"/> java.lang.InstantiationException java.math.BigDecimal 他的例子都是使用 tapestry里面的类初始化的,例如: <bean name="required" class="org.apache.tapestry.form.validator.Required"/> 为什麽换成了 jdk里面的 java.math.BigDecimal就出错呢?多谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-10-16
Tapestry里的bean好像必须有空的默认构造函数,这样才能创建bean,BigDecimal类没有默认的空的构造函数,所以没法实例化。
|
|
返回顶楼 | |
发表时间:2005-10-16
从出的例外来看,可能是这个问题,那末在这种情况下怎样解决呢? 正确初始化方法是什麽?谢谢
|
|
返回顶楼 | |
发表时间:2005-10-16
而且例子里面的 这句:
<binding name="value" value="visit.bigDecimalValue"/> 其中的 visit不知道是哪里来的,在 *.application中也没有找到 这个变量。 只是在Visit.java里面看到了 bigDecimalValue 的定义. |
|
返回顶楼 | |
发表时间:2005-10-17
1、value="visit.bigDecimalValue"相当于getVisit().getBigDecimalValue(),每一个Page页面都有getVisit()方法。
2、验证类的编写需要继承Validator接口,例如 public class PatronCodeValidator implements Validator { private KnownPatrons knownPatrons; public void setKnownPatrons(KnownPatrons knownPatrons) { this.knownPatrons = knownPatrons; } public void validate( IFormComponent field, ValidationMessages messages, Object object) throws ValidatorException { String patronId = (String) object; if (!knownPatrons.isKnown(patronId)) { throw new ValidatorException("Patron not found", null); } } public boolean getAcceptsNull() { return false; } public void renderContribution( IMarkupWriter writer, IRequestCycle cycle, FormComponentContributorContext context, IFormComponent field) { } public boolean isRequired() { return false; } bean的定义: <bean name="patronCodeValidator" class="com.ttdev.postage.PatronCodeValidator"> <set name="knownPatrons" value="ognl:knownPatrons"/> </bean> 使用: <component id="patronCode" type="TextField"> <binding name="value" value="patronCode"/> <binding name="validators" value="bean:patronCodeValidator"/> </component> 注:这个例子不是可运行的例子,摘自:Enjoying Web Development with Tapestry 你可以从http://www.agileskills2.org/EWDT/处下载。 |
|
返回顶楼 | |
发表时间:2005-10-17
变通的办法:
<property name="bigDice" initial-value="ognl:new java.math.BigDecimal(xxx)"> .. <binding name="value" value="clientScriptingEnabled"/> <binding name="value" value="ognl:bigDice"/> ... 不得已的办法。没有了managed bean的延迟加载的好处了。 |
|
返回顶楼 | |