如何在带有zone属性的表单中使用表单验证?

时间:2013-04-17 13:28:52

标签: forms validation tapestry zone

我在Tapestry 5.3.6上遇到了一个大问题。

我有一个带有自定义简单mixins的表单,暗示表单的id无法被修改:/

所以我有这个:

<form t:type="form" t:id="formId" t:mixins="aMixins" t:zone="zoneID">
    <t:errors/>
    <input t:type="TextField"/>
    <a t:type="LinkSubmit" t:id="linkId"/>
</form>

<t:zone t:id="zoneID">
      Something....
</t:type>

当我使用区域表单属性时,不会显示验证错误,如何在不将表单包含到区域中的情况下使验证错误显示错误?

我不能将这个表单包含在一个区域中,因为当我的mixin初始化时,它会在一些DOM元素上放置一些侦听器,当我提交表单时,表单会重新加载(因为区域)并重新加载mixin ,它会在新的DOM元素上添加更多的侦听器,并且在提交之后会触发相应的侦听器捕获的事件,但是一些侦听器链接到不存在的元素并且js崩溃。

非常感谢你的回应

1 个答案:

答案 0 :(得分:0)

1。

  

我有一个带有自定义简单mixins的表单,暗示了表单的ID   无法修改

这并非暗示。也许,这是你的要求吗?

如果没有,那么将mixin插入到ajax渲染中,你需要使mixin更灵活。

在YourMixin课程中:

@InjectContainer
private ClientElement element;

void afterRender() {

    String elementId = element.getClientId();

    JSONObject spec = new JSONObject();
    spec.put("elementId", elementId);

    jsSupport.addScript("new MixinHandler(%s)", spec.toString());
}

这只是一个提示,请查看完整示例的自动完成实现(类,javascript)。

2。

  

当我使用区域表单属性时,验证无效

这听起来很可疑..我猜验证错误是不可见的,因为您没有更新表单本身及其<t:errors/>标记。

如果您将断点设置为页面中表单的FAILURE和SUCCESS事件处理程序,则可以验证这一点(请参阅org.apache.tapestry5.EventConstants)。