我試圖在顯示標籤標題密鑰中使用應用程序資源屬性。沒有顯示。請幫助繼續。我正在使用struts2。如何在顯示標籤titlekey中映射應用程序資源鍵?
3
A
回答
5
,我已通過使用下面的代碼
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;
}
}
解決它
1
請顯示一些代碼並排除故障。
使用<s:text name="my.key"/>
確保您的標籤已正確加載到該頁面上。如果顯示my.key的值,那麼您知道您的語言文件已正確加載。
如果這是行之有效的titleKey="my.key"
財產display:column
也應該工作。另外titleKey是大小寫敏感的,它不是titlekey。
相關問題
- 1. 覆蓋應用程序/資源中的Doctrine Yaml映射
- 2. 如何將資源映射到Rails 3中的應用程序的根目錄?
- 3. 標籤鍵的標籤列表映射
- 4. 映射多個域名不同資源的Rails應用程序
- 5. 將資源映射到已安裝的應用程序
- 6. 映射WAS6資源的資源引用
- 7. 使用url在j2ee web應用程序中顯示資源
- 8. 如何訪問我的資源中的應用程序映像?
- 9. hibernate.cfg.xml映射資源
- 10. 在onchange事件中在div標籤中顯示映射值
- 11. 如何在應用程序中顯示jBPM過程映像?
- 12. 如何將菜單鍵(「應用程序鍵」)映射到vim中的退出鍵?
- 13. 顯示錶:titlekey不工作
- 14. 如何在RCP應用程序中顯示Windows文件資源管理器?
- 15. 如何設置未映射資源
- 16. 如何在我的Spring應用程序中映射靜態資產?
- 17. Alljoyn示例應用程序資源
- 18. 映射鍵,以便將映射僅在某些應用程序有效
- 19. AHK鍵重新映射ALT標籤
- 20. Spring Webflow + MVC資源映射
- 21. spring mvc資源映射到/ **
- 22. 靜態資源映射
- 23. AngularJS高級$資源映射
- 24. 如何管理應用程序資源?
- 25. 如何處理應用程序資源
- 26. 如何在c#窗口應用程序中顯示RSS源
- 27. 在內核線程上映射時用戶線程資源
- 28. 如何在Android應用程序中顯示鍵盤?
- 29. 來自mvc:資源的處理程序映射覆蓋其他映射,這些映射使用註釋定義
- 30. 在Android應用程序中重新映射座標系