你页面头定义 taglib了吗??<% @ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>你可能只设了bean的~

解决方案 »

  1.   

    定义的话贴出的你的struts-html.tld,可能是这里的问题~
      

  2.   

    有可能页面上没有包含进来html标签啊!!!如果不是,就不知道什么问题了。换个struts环境再看看。
      

  3.   

    这个应该不是以上问题吧-_-!
    肯定是引用了
    其他struts-html.tld标签用到的都能显示
    struts-html.tld是jbx 自己生成的,里面也有 errors
      

  4.   

    可能是你的property文件写的不对。
    你所写的messageID,在property里面没有。
      

  5.   

    不会,即使是配置文件中没有配置,那么返回的是null,而StringBuffer是允许null为参数的,
        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);    }
      

  6.   

    获得消息的代码:
        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;
        }
      

  7.   

    并且为什么使用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);
        }
      

  8.   

    哦,不是,我这个是最新的1.2,我刚刚试了一下,发现是在errorTag中1.1和1.2做了不同的处理,假如你写errors.add("userName",new ActionMessage("validate.userName")),那么是可以编译过去的,因为本来就接受的是Action参数Message,但是在1.1中可能作了个强制转化,将ActionMessage为ActionError,于是出现了classcasterror,但是在1.2中就是我上面的代码,他全部是作为ActionMessage处理,所以不会出现问题。因此这的原因是struts版本问题,你写代码使用的是1.2的写法,而运行的是1.1的jar包
      

  9.   

    ActionErrors errors = new ActionErrors();
    ……
    errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionError("error.user"));
    ……
      if (!errors.isEmpty()) {
          saveErrors(request, errors);
          return (new ActionForward(mapping.getInput()));
      }
    ……