2010-12-23 32 views
1

我有一个页面:Test.tml包含一个选择和组件:动作时从容器触发如何更新组件内的区域

 <t:zone t:id="zone1" t:clientId="zone1"> 
     <form t:id="form" id="form" method="post"> 
      <p> 
       <select t:type="select" t:id="simpleSelect" t:clientId="simpleSelect" t:value="simpleSelect" t:model="selectList" t:zone="zone1" /> 
      </p> 
     </form> 
    <div t:type="SimpleTestComponent" t:id="simpleTestComponent" ></div> 
</t:zone> 

在Test.java,我赶上事件:

@OnEvent(value = EventConstants.VALUE_CHANGED, component = "simpleSelect") 
public Object changeOnSelect(String value) { 
    return zone1.getBody(); 
} 

其中井更新zone1的

,我有其还包含一个选择和更新的区域的部件;组件选择的内容取决于容器选择表单值,所以我需要更新组件的内容。如果我的组件内没有区域,它运行良好,但事实并非如此。

内部SimpleTestComponent.tml,我有:

<form t:id="form" id="form" method="post"> 
     <p> 
      <select t:type="select" t:id="nameSelect" t:clientId="nameSelect" t:value="nameSelected" t:model="nameList" t:zone="zoneComponent"/> 
     </p> 
    </form> 
    <t:zone t:id="zoneComponent" t:clientId="zoneComponent"> 
    <p>${nameSelected}</p></t:zone> 

和SimpleTestComponent.java =>

@OnEvent(value = EventConstants.VALUE_CHANGED, component = "nameSelect") 
public Object valueChanged() { 
    return zoneComponentId.getBody(); 
} 

我赶选择变化,以及i更新值。

我现在想要的是,当选择从Test.tml更改时,也能够更新SimpleTestComponent的内容。如果我在zone1中包含simpleTestComponent,我有一个错误,关于simpleTestComponent内的区域,当我触发Test.java中的valueChanged事件时,我带着zone1和组件区域(我在区域组件上放置了一个公共getter)时返回MultiZoneUpdate。 ,我也有一个错误,那么解决方案是什么......?

我不确定完全清楚,thx阅读。 :)

+0

我使用tapestry 5.2.4 – Antoine 2010-12-23 16:22:44

回答

2

你需要让你的嵌入式区(zoneComponent)适用于含有成分:

public class SimpleTestComponent 
{ 
    public Zone getZoneComponent() 
    { 
     return zoneComponentId; 
    } 
} 

,然后从你的事件处理程序在您的测试类返回区:

public class Test 
{ 
    @InjectComponent 
    private SimpleTestComponent simpleTestComponent; 

    @OnEvent(value = EventConstants.VALUE_CHANGED, component = "simpleSelect") 
    public Object changeOnSelect(String value) 
    { 
     return simpleTestComponent.getZoneComponent(); 
    } 
} 
+0

它几乎奏效,zone的组件已经很好的刷新了,但id会自动生成并替换原来的id。我有一个错误:“无法找到区域元素'zoneComponent'更新元素'nameSelect_12d94ae9b75”的更改。 – Antoine 2011-01-17 15:55:19

相关问题