2

我正在使用 Struts2 - FileUploadInterceptor 来处理正在上传的文件的内容类型和最大大小。

为了显示错误消息,<s:fielderror/>显示错误消息是完美的。

我正在处理一个包含多个部分的页面,我需要显示仅属于该部分的错误消息,问题<s:fielderror/>是它显示所有错误消息并解决此参数将被传递,例如

<s:fielderror><s:param>firstName</s:param></s:fielderror>

我不确定 FileUploadInterceptor 为内容类型错误和最大大小错误创建的错误键是什么,请帮助我解决这个问题。

4

1 回答 1

1

如果我理解正确,我认为你想做这样的事情:

<s:fielderror>[some reference to a content type error]</s:fielderror>
<s:fielderror>[some reference to a max size error]</s:fielderror>

这样您就可以分别/不同地渲染它们。

目前这是不可能的,因为<s:fielderror/>只需要字段名称。
您不能以这种方式分隔一个字段的多个错误。

此外,查看 中方法的源代码,首先检查最大大小,如果检查失败,则会设置错误。如果最大大小已经失败,则代码不会继续检查允许的类型。acceptFileFileUploadInterceptor

  353           } else if (maximumSize != null && maximumSize < file.length()) {
  354               String errMsg = getTextMessage(action, "struts.messages.error.file.too.large", new Object[]{inputName, filename, file.getName(), "" + file.length()}, locale);
  355               if (validation != null) {
  356                   validation.addFieldError(inputName, errMsg);
  357               }
  358   
  359               LOG.warn(errMsg);
  360           } else if ((!allowedTypesSet.isEmpty()) && (!containsItem(allowedTypesSet, contentType))) {
  361               String errMsg = getTextMessage(action, "struts.messages.error.content.type.not.allowed", new Object[]{inputName, filename, file.getName(), contentType}, locale);
  362               if (validation != null) {
  363                   validation.addFieldError(inputName, errMsg);
  364               }
  365   
  366               LOG.warn(errMsg);
  367           }

因此,您一次应该只得到其中一个错误。

于 2012-07-12T14:44:16.413 回答