当我尝试更新处理事件中的组件区域时(选择框的onValueChanged),我遇到此问题。
[ERROR] TapestryModule.RequestExceptionHandler Processing of request failed with uncaught exception: Failure writing parameter 'value' of component calendar/Stereotype:daycomponent.selectcategoryactivity: Property 'day' (within property expression 'day.category', of com.hb.craproject.web.components.calendar.stereotype.AddDayStereotypeComponent@3a6b9a8a) is null.
org.apache.tapestry5.ioc.internal.OperationException: Failure writing parameter 'value' of component calendar/Stereotype:daycomponent.selectcategoryactivity: Property 'day' (within property expression 'day.category', of com.hb.craproject.web.components.calendar.stereotype.AddDayStereotypeComponent@3a6b9a8a) is null. [at classpath:com/hb/craproject/web/components/calendar/stereotype/AddDayStereotypeComponent.tml, line 24]
“Day”是这样定义的参数:
@Parameter(required=true)
@Property
private DayStereotypeBean day
当组件第一次渲染时,一切正常。只有在我尝试更改所选值时才会崩溃并给出错误消息。
我的DayComponents在我的tml页面中声明如下:
<t:loop source="week" value="dayBean">
<tr style="border :0.1em solid blue; border-radius : 0.5em">
<t:day t:id="dayComponent" day="dayBean" /></tr></t:loop>
所以这是Day Bean的列表。该列表在页面的setuprender事件处理程序中提供。
我不明白为什么Day参数在select组件的事件处理程序中丢失了他的引用:
public Object onValueChangedFromSelectDuree(String duree)
{
//throwing exception, day.Day is a String, this line is just for showing you that the object doesn't exist anymore in the method, if this line is not here, the exception is throwed too because my select tml component use (like many oher components) that object
day.getDay();
return request.isXHR() ? zoneDuree.getBody() : null;
}
现在你可以看到select tml组件:
<t:zone t:id="zoneDuree">
<t:select t:id="selectDuree"
model="literal:journée,demi-journée,définir" value="day.duree" zone="zoneDuree" /> <!-- here some fields depending of the select value --></t:zone>
任何想法都应该受到赞赏。
(抱歉我的英语不好;))
答案 0 :(得分:2)
“setuprender”事件仅在最初呈现页面时触发。在setupRender()中初始化的任何内容在后续事件请求中都将为null。
以下是一些选项:
您可能会发现内置的select / ajax更新是不够的,因为您无法提供多个上下文值。查看onEvent
mixin here,它允许您自定义在客户端事件(例如更改)发生时从客户端传递到服务器端事件的内容。