并且为什么使用message可以得到呢,你使用的是struts的哪个版本呢, 下面是messages的代码,这里面的逻辑是一样的,在messages里面假如没有输入message="true"的话,那么name的值都是一样的,全是org.apache.struts.action.ERROR,所以应该不会出现问题,可能你的版本和我的不一样,我是1.1 public int doStartTag() throws JspException { // Initialize for a new request. processed = false; // Were any messages specified? ActionMessages messages = null; // Make a local copy of the name attribute that we can modify. String name = this.name; if (message != null && "true".equalsIgnoreCase(message)) { name = Globals.MESSAGE_KEY; } try { messages = TagUtils.getInstance().getActionMessages(pageContext, name); } catch (JspException e) { TagUtils.getInstance().saveException(pageContext, e); throw e; } // Acquire the collection we are going to iterate over this.iterator = (property == null) ? messages.get() : messages.get(property); // Store the first value and evaluate, or skip the body if none if (!this.iterator.hasNext()) { return SKIP_BODY; } ActionMessage report = (ActionMessage) this.iterator.next(); String msg = TagUtils.getInstance().message( pageContext, bundle, locale, report.getKey(), report.getValues()); if (msg == null) { pageContext.removeAttribute(id); } else { pageContext.setAttribute(id, msg); } if (header != null && header.length() > 0) { String headerMessage = TagUtils.getInstance().message(pageContext, bundle, locale, header); if (headerMessage != null) { TagUtils.getInstance().write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); }
ActionErrors errors = new ActionErrors(); …… errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError("error.user")); …… if (!errors.isEmpty()) { saveErrors(request, errors); return (new ActionForward(mapping.getInput())); } ……
肯定是引用了
其他struts-html.tld标签用到的都能显示
struts-html.tld是jbx 自己生成的,里面也有 errors
你所写的messageID,在property里面没有。
public int doStartTag() throws JspException { // Were any error messages specified?
ActionMessages errors = null;
try {
errors = TagUtils.getInstance().getActionMessages(pageContext, name);
} catch (JspException e) {
TagUtils.getInstance().saveException(pageContext, e);
throw e;
} if ((errors == null) || errors.isEmpty()) {
return (EVAL_BODY_INCLUDE);
} boolean headerPresent =
TagUtils.getInstance().present(pageContext, bundle, locale, "errors.header"); boolean footerPresent =
TagUtils.getInstance().present(pageContext, bundle, locale, "errors.footer"); boolean prefixPresent =
TagUtils.getInstance().present(pageContext, bundle, locale, "errors.prefix"); boolean suffixPresent =
TagUtils.getInstance().present(pageContext, bundle, locale, "errors.suffix"); // Render the error messages appropriately
StringBuffer results = new StringBuffer();
boolean headerDone = false;
String message = null;
Iterator reports = (property == null) ? errors.get() : errors.get(property); while (reports.hasNext()) {
ActionMessage report = (ActionMessage) reports.next();
if (!headerDone) {
if (headerPresent) {
message =
TagUtils.getInstance().message(
pageContext,
bundle,
locale,
"errors.header");
results.append(message);
}
headerDone = true;
}
if (prefixPresent) {
message =
TagUtils.getInstance().message(
pageContext,
bundle,
locale,
"errors.prefix");
results.append(message);
}
message =
TagUtils.getInstance().message(
pageContext,
bundle,
locale,
report.getKey(),
report.getValues());
if (message != null) {
results.append(message);
}
if (suffixPresent) {
message =
TagUtils.getInstance().message(
pageContext,
bundle,
locale,
"errors.suffix");
results.append(message);
}
}
if (headerDone && footerPresent) {
message =
TagUtils.getInstance().message(pageContext, bundle, locale, "errors.footer");
results.append(message);
} TagUtils.getInstance().write(pageContext, results.toString()); return (EVAL_BODY_INCLUDE); }
public String message(
PageContext pageContext,
String bundle,
String locale,
String key,
Object args[])
throws JspException { MessageResources resources =
retrieveMessageResources(pageContext, bundle, false); Locale userLocale = getUserLocale(pageContext, locale);
String message = null;
if (args == null) {
message = resources.getMessage(userLocale, key);
} else {
message = resources.getMessage(userLocale, key, args);
}
if ((message == null) && log.isDebugEnabled()) {
// log missing key to ease debugging
log.debug(resources.getMessage("message.resources", key, bundle, locale));
}
return message;
}
下面是messages的代码,这里面的逻辑是一样的,在messages里面假如没有输入message="true"的话,那么name的值都是一样的,全是org.apache.struts.action.ERROR,所以应该不会出现问题,可能你的版本和我的不一样,我是1.1
public int doStartTag() throws JspException {
// Initialize for a new request.
processed = false; // Were any messages specified?
ActionMessages messages = null; // Make a local copy of the name attribute that we can modify.
String name = this.name; if (message != null && "true".equalsIgnoreCase(message)) {
name = Globals.MESSAGE_KEY;
} try {
messages = TagUtils.getInstance().getActionMessages(pageContext, name); } catch (JspException e) {
TagUtils.getInstance().saveException(pageContext, e);
throw e;
} // Acquire the collection we are going to iterate over
this.iterator = (property == null) ? messages.get() : messages.get(property); // Store the first value and evaluate, or skip the body if none
if (!this.iterator.hasNext()) {
return SKIP_BODY;
} ActionMessage report = (ActionMessage) this.iterator.next();
String msg =
TagUtils.getInstance().message(
pageContext,
bundle,
locale,
report.getKey(),
report.getValues()); if (msg == null) {
pageContext.removeAttribute(id);
} else {
pageContext.setAttribute(id, msg);
} if (header != null && header.length() > 0) {
String headerMessage =
TagUtils.getInstance().message(pageContext, bundle, locale, header); if (headerMessage != null) {
TagUtils.getInstance().write(pageContext, headerMessage);
}
} // Set the processed variable to true so the
// doEndTag() knows processing took place
processed = true; return (EVAL_BODY_TAG);
}
……
errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError("error.user"));
……
if (!errors.isEmpty()) {
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
……