【问题标题】:Task with Save button throws validation errors带有保存按钮的任务引发验证错误
【发布时间】:2014-01-09 13:02:36
【问题描述】:

我有一个 webMethods CAF 任务,它有一个带有保存按钮和提交按钮的大表单。表单上的许多元素都有验证。用户需要能够点击保存并将表单提交到后端模型,以便可以将其保存为任务数据,而无需触发验证。点击提交应该会触发验证。

如何配置页面来执行此操作。这是一个正常的要求,我被卡住了!

【问题讨论】:

  • 您的验证在哪里实施?
  • 这是服务器端验证,只是在 webMethods Designer 中配置。 required=true 是主要的。我认为它只是在 Process Validations 阶段运行一个内置的验证器。
  • 你能用required="true"执行它吗?
  • 验证有效,但保存无效。如果我在“保存”按钮上设置了 immediate=true,它不会引发验证错误,但它还会将表单中的新值替换为后端的先前值。
  • 我已经解决了这个问题,忘记回复了。将在这里记录。不是很漂亮。

标签: jsf webmethods webmethods-caf


【解决方案1】:

没什么好玩的。

  1. 为您的保存按钮设置一个漂亮的 ID。说,保存按钮
  2. 在您的 Java 代码中创建一个返回布尔值的 getter。在其中,如果按钮的 ID 是提交的字段之一,则返回 true,否则返回 false:

    private boolean validationRequired() {
        return mapValueEndsWith((Map<String, String>)getRequestParam(),
            new String[] {
                "saveButton",           // Your save button
                "anotherButton",        // Perhaps another button also shouldn't validate
                "myForm:aThirdButton"   // perhaps you want to be specific to a form
            });
    }
    
  3. 在每个需要的字段中,除了 Save 之外,将 Validation->required 属性绑定到您的 validationRequired getter。

就是这样!屏幕上有很多字段非常乏味,但它确实有效。

附: mapValueEndswith 是什么?只是一个实用程序;为了紧凑而删除了空格:

private boolean mapValueEndsWith(Map<String, String> haystack, String[] needles) {
    for(String needle : needles) if(mapValueEndsWith(haystack, needle)) return true;
    return false;
}

private boolean mapValueEndsWith(Map<String, String> haystack, String needle) {
    for(String value : haystack.values()) if(value.endsWith(needle)) return true;
    return false;
}

【讨论】:

  • @user2930137 CAF 异常难。祝你好运:)
【解决方案2】:

我看到所提供的方法仅在表单仅包含字符串类型字段时才有效。如果有任何其他数据类型(如整数、浮点数、数据时间)映射到 UI 字段并使用转换,则如果在这些字段中输入错误数据,则可能会失败。

【讨论】:

  • 这应该是comment,而不是answer。反正。同意,但是只要您对其进行了客户端验证,就可以正常工作。我也许可以扩展答案以包括如何应对转换等。
  • 我知道这是一条评论,但只是为了记下用户需要 50 声望才能发表评论。当我这样做时,我没有那种声誉。
猜你喜欢
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多