gpt4 book ai didi

java - Tapestry 5 - 两个组件之间的通信

转载 作者:行者123 更新时间:2023-12-04 06:19:45 25 4
gpt4 key购买 nike

我的 Java + Tapestry 5 应用程序中有一个页面,其中包含两个组件 - 一个表单和一个网格。表单字段用于过滤网格中显示的结果。该表单只是一个文本字段,用于设置它所映射到的对象 A 的值。网格是从对象 A 创建的。我需要将正确的实例从表单组件发送到网格组件。做这个的最好方式是什么?我可以通过在上层页面中设置对象来使用普通的旧 Java 方法,但应该有一种更简洁的方法。我在考虑环境注释,但这不是太重了吗?

public class I1 {
@Component
private WFRFormFilter wfrFormFilter;

@Component (parameters={ "wfrDataHolder=property:wfrFormFilter.wfrDataHolder" })
private WFRResultTable wfrResultTable;
}

public class WFRFormFilter {
@Inject
private WFRService wfrservice;

@Propperty
@Persist
private WFRDataHolder wfrDataHolder;

@PageAttached
void pageAttached() {
if (wfrDataHolder == null) {
wfrDataHolder = new WFRDataHolder();
}
}

@OnEvent(EventConstants.SUCCESS)
void processMyForm() { }
}

public class WFRResultTable {
@Parameter(defaultPrefix=BindingConstants.PROP)
@Property
private WFRDataHolder wfrDataHolder;

@Inject
private WFRService wfrservice;

public List<WFRDataHolder> getResultTableData() {
return wfrservice.getData(this.wfrDataHolder);
}
}

最佳答案

Tapestry 的参数是双向工作的:如果您将数据存储在您的页面类中(使用 @Persist)并将它作为参数传递给您的表单组件,您可以在表单中更改它的值组件,这将自动反射(reflect)到您的页面:无需调用 setter 。

因此,如果您的页面和表单组件布局如下:

 public class MyPage {

@Component(parameters = "dataHolder=dataHolder")
private MyForm formComponent;

@Component(parameters = "dataHolder=dataHolder")
private MyGrid gridComponent;

@Persist
@Property
private MyDataHolder dataHolder;

}

public class MyFormComponent {

@Parameter
private MyDataHolder dataHolder;

@OnEvent(EventConstants.SUCCESS)
void formSubmitted() {
this.dataHolder = new DataHolder(...);
}

}

...那么正确的值将始终出现在页面中,因此也会出现在网格组件上。

另见 Component Parameters page in the Tapestry docs ,特别是“参数是双向的”部分。

关于java - Tapestry 5 - 两个组件之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6733865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com