我正在使用tapestry 5.3.7,我想使用Ajax链接选择表单元素:如果我在select元素中选择一个选项,则另一个选择似乎根据您的第一选择选择另一个元素。我在tapestry doc中尝试了一个示例,并根据我的项目进行了调整。尽管我的自定义代码非常接近样本,但我总是遇到以下错误:
在SetupRender中呈现队列错误[SelectZoneDemo:version]:组件SelectZoneDemo:版本必须由表单组件包围。
来自doc的工作示例(选择组件CarMaker的链接) http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Select.html)
这是我的代码: 模板文件(.tml)
<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>
Java文件
@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);
}
答案 0 :(得分:1)
通过ajax渲染表单中的区域可能会因为您发现而变得棘手。字段要求FormSupport实例位于Environment堆栈上。这通常会在父表单呈现时添加到环境中,但正如您所发现的,当在表单中呈现区域时,FormSupport不可用。
以下是一些选择: