struts2之如何在显示标签titlekey中映射Application resources key

java哥 阅读:12 2024-10-17 08:59:04 评论:0

我尝试在显示标签标题键中使用应用程序资源属性。没有显示。请帮助继续。我正在使用 struts2。

请您参考如下方法:

在display tag.properties中,我用下面的代码解决了

locale.provider=com.sample.web.resource.I18nStruts2Adapter 
locale.resolver=com.sample.web.resource.I18nStruts2Adapter 
 
 
 
package com.sample.web.resource; 
 
import com.opensymphony.xwork2.ActionContext; 
import com.opensymphony.xwork2.LocaleProvider; 
import com.opensymphony.xwork2.TextProvider; 
import com.opensymphony.xwork2.util.ValueStack; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts2.views.jsp.TagUtils; 
import org.displaytag.Messages; 
import org.displaytag.localization.I18nResourceProvider; 
import org.displaytag.localization.LocaleResolver; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.jsp.PageContext; 
import javax.servlet.jsp.tagext.Tag; 
import java.util.Iterator; 
import java.util.Locale; 
 
 
public class I18nStruts2Adapter implements LocaleResolver, I18nResourceProvider { 
 
    /** 
     * prefix/suffix for missing entries. 
     */ 
    public static final String UNDEFINED_KEY = "???"; //$NON-NLS-1$ 
 
    /** 
     * logger. 
     */ 
    private static Log log = LogFactory.getLog(I18nStruts2Adapter.class); 
 
    /** 
     * @see LocaleResolver#resolveLocale(javax.servlet.http.HttpServletRequest) 
     */ 
    public Locale resolveLocale(HttpServletRequest request) { 
 
        Locale result = null; 
        ValueStack stack = ActionContext.getContext().getValueStack(); 
 
        Iterator iterator = stack.getRoot().iterator(); 
        while (iterator.hasNext()) { 
            Object o = iterator.next(); 
 
            if (o instanceof LocaleProvider) { 
                LocaleProvider lp = (LocaleProvider) o; 
                result = lp.getLocale(); 
 
                break; 
            } 
        } 
 
        if (result == null) { 
            log.debug("Missing LocalProvider actions, init locale to default"); 
            result = Locale.getDefault(); 
        } 
 
        return result; 
    } 
 
    /** 
     * @see I18nResourceProvider#getResource(String, String, 
     *      javax.servlet.jsp.tagext.Tag , javax.servlet.jsp.PageContext) 
     */ 
    public String getResource(String resourceKey, String defaultValue, Tag tag, 
            PageContext pageContext) { 
 
        // if resourceKey isn't defined either, use defaultValue 
        String key = (resourceKey != null) ? resourceKey : defaultValue; 
        System.out.println("Key :"+key); 
        String message = null; 
        ValueStack stack = TagUtils.getStack(pageContext); 
        Iterator iterator = stack.getRoot().iterator(); 
 
        while (iterator.hasNext()) { 
            Object o = iterator.next(); 
 
            if (o instanceof TextProvider) { 
                TextProvider tp = (TextProvider) o; 
                message = tp.getText(key); 
 
                break; 
            } 
        } 
 
        // if user explicitely added a titleKey we guess this is an error 
        if (message == null && resourceKey != null) { 
            log.debug(Messages 
                    .getString("Localization.missingkey", resourceKey)); //$NON-NLS-1$ 
            message = UNDEFINED_KEY + resourceKey + UNDEFINED_KEY; 
        } 
 
        return message; 
    } 
 
} 


标签:Struts2
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号