我在Tapestry组件的tml文件中有一个表单。
...
<t:form t:id="searchForm" clientValidation="none">
....
<t:select t:id="globalSport" model="globalSportModel" value="formData.globalSportId" blankOption="never"/>
....
</t:form>
..
这是相应Java文件的重要部分:
...
@Property(read = true, write = false)
private ServiceSearchFormData formData;
...
@OnEvent(value = EventConstants.PREPARE_FOR_SUBMIT, component = "searchForm")
void prepareForSubmit()
{
formData = new ServiceSearchFormData();
}
...
这似乎非常简单。 ServiceSearchFormData
是一个DTO,具有很少的属性和getter / setter方法。它封装了表单中提交的数据。在&#34;上准备提交实例&#34;事件。 ......它工作正常。
但是,偶尔会在生产环境中抛出异常。我无法重现它。它发生在将数据提交到此表单的POST请求范围内。异常消息指出:
写入参数失败&#39;值&#39;组件MyPortal:portalindex.portalsearchform.globalsport:Property&#39; formData&#39; (在属性表达式中,#cc.ftm.fitsoftware.webapp.components.PortalSearchForm@3262579e的formData.globalSportId&#39;)为空。
怎么可能?财产formData
如何未初始化?这种罕见(但常规)的异常是否可能是由POST请求的t:formdata
参数的格式错误造成的?
感谢您的帮助。
答案 0 :(得分:1)
基于这一点,我可以看到,我会尝试两件事来缩小问题范围:
我会删除component = "searchForm"
限定符
@OnEvent(value = EventConstants.PREPARE_FOR_SUBMIT)
void prepareForSubmit()
{
formData = new ServiceSearchFormData();
}
我会删除所有其他的@OnEvent注释,看看是否有任何人吞下这个事件:
//@OnEvent(...)
void foo() {...}