Java 在Tapestry 5.3(Ajax更新)中链接多个select组件
我使用的是tapestry 5.3.7,我想使用Ajax链接选择表单元素:如果我在一个选择元素中选择一个选项,另一个选择将根据您的第一个选择选择另一个元素。我在tapestry文档中尝试了一个示例,并根据我的项目进行了调整。尽管我的自定义代码与示例非常接近,但我始终存在以下错误: SetupRender[SelectZoneDemo:version]:组件SelectZoneDemo:version中的渲染队列错误必须由表单组件括起。 文件中的工作样本(选定零部件汽车制造商的链接)) 这是我的密码: 模板文件(.tml)Java 在Tapestry 5.3(Ajax更新)中链接多个select组件,java,ajax,forms,tapestry,Java,Ajax,Forms,Tapestry,我使用的是tapestry 5.3.7,我想使用Ajax链接选择表单元素:如果我在一个选择元素中选择一个选项,另一个选择将根据您的第一个选择选择另一个元素。我在tapestry文档中尝试了一个示例,并根据我的项目进行了调整。尽管我的自定义代码与示例非常接近,但我始终存在以下错误: SetupRender[SelectZoneDemo:version]:组件SelectZoneDemo:version中的渲染队列错误必须由表单组件括起。 文件中的工作样本(选定零部件汽车制造商的链接)) 这是我的密
Java文件
@Inject
私人AjaxResponsenderer AjaxResponsenderer;
@注入
私人iSeries应用程序服务应用程序;
@注入
私有SelectModelFactory SelectModelFactory;
@财产
@坚持
私有选择模型选择应用程序;
@财产
@坚持
私有字符串版本;
@财产
@坚持
私有选择模型选择版本;
@注入
@财产
专用应用程序加密码应用程序加密码;
@注入
@财产
私有版本的ToEncoder版本的ToEncoder;
@财产
@坚持
私有应用程序D,用于选择应用程序F;
@注射组分
专用区版本区;
激活时的公共无效(){
List listApplicationFS=serviceApplication.findallapplicationfdto();
List ListVersionApplicationFS=new ArrayList();
selectApplicationFS=selectModelFactory.create(listApplicationFS,“nom”);
如果(selectVersions==null){
selectVersions=selectModelFactory.create(ListVersionApplicationFS,“版本”);
}
}
public void从选定的ApplicationFS更改的值(ApplicationFDto ApplicationFDTO){
List versionList=applicationdo.getVersionList();
selectVersions=selectModelFactory.create(versionList,“version”);
ajaxResponseRenderer.addRender(versionZone);
}
正如您所发现的,通过ajax在表单中呈现区域可能会变得棘手。字段要求实例位于堆栈上。这通常在父窗体渲染时添加到环境中,但正如您所发现的,在窗体中渲染区域时,FormSupport不可用
这里有几个选项:
<t:form>
<p>
<t:errors />
</p>
<p>
<t:select t:id="selectApplicatifs" t:model="selectApplicatifs"
t:value="selectedApplicatif" validate="required" zone= "VersionZone"
t:zone="versionZone" t:encoder="ApplicatifDtoEncoder" />
</p>
<t:zone t:id="versionZone" id="versionZone">
<t:if test="selectedApplicatif">
<p>
<t:select t:id="version" model="selectVersions" t:encoder="VersionDtoEncoder" />
</p>
</t:if>
<p>
<t:submit value="literal:Submit" />
</p>
</t:zone>
</t:form>
@Inject
private AjaxResponseRenderer ajaxResponseRenderer;
@Inject
private IServiceApplicatif serviceApplicatif;
@Inject
private SelectModelFactory selectModelFactory;
@Property
@Persist
private SelectModel selectApplicatifs;
@Property
@Persist
private String version;
@Property
@Persist
private SelectModel selectVersions;
@Inject
@Property
private ApplicatifDtoEncoder applicatifDtoEncoder;
@Inject
@Property
private VersionDtoEncoder versionDtoEncoder;
@Property
@Persist
private ApplicatifDto selectedApplicatif;
@InjectComponent
private Zone versionZone;
public void onActivate() {
List<ApplicatifDto> listApplicatifs = serviceApplicatif.findAllApplicatifDto();
List<VersionDto> listVersionApplicatifs = new ArrayList<VersionDto>();
selectApplicatifs = selectModelFactory.create(listApplicatifs, "nom");
if (selectVersions == null) {
selectVersions = selectModelFactory.create(listVersionApplicatifs,"version");
}
}
public void onValueChangedFromSelectApplicatifs(ApplicatifDto applicatifDto) {
List<VersionDto> versionList = applicatifDto.getVersionList();
selectVersions = selectModelFactory.create(versionList,"version");
ajaxResponseRenderer.addRender(versionZone);
}