有两种方法来实现该功能:间接法、直接法
第一种:间接法,使用el表达式与struts2的tag来写,这种方法比较繁琐,比如:
<s:set name="username" value="getText('user.username')" scope="page" />
<ec:table items="users" var="user" tableId="user" form="userForm"
view="multiCompact"
action="${ctx}/system/listUser.action" locale="${i18n_locale}">
<ec:row>
<ec:column property="username" title="${username}" />
</ec:row>
</ec:table>
第二种:直接法,该方法是利用ec提供的扩展点来实现,这主要得益于ec的良好设计,该方法有两个步骤:
1.定义个实现org.extremecomponents.table.core.Messages结构的类
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Locale;
import
javax.servlet.jsp.PageContext;
import
org.apache.struts2.views.jsp.TagUtils;
import
org.extremecomponents.table.context.Context;
import
org.extremecomponents.table.core.Messages;
import
org.extremecomponents.table.resource.TableResourceBundle;
import
com.opensymphony.xwork2.TextProvider;
import
com.opensymphony.xwork2.util.ValueStack;

public
class
MessagesStruts2Adapter
implements
Messages
...
{
privateTextProvidertextProvider=null;
privateMessagesdefaultMessages;

publicMessagesStruts2Adapter()...{
super();
this.defaultMessages=newTableResourceBundle();
}

publicvoidinit(Contextcontext,Localelocale)...{
//先读取extremecomponents自带的国际化文件
this.defaultMessages.init(context,locale);

if(context.getContextObject()instanceofPageContext)...{
PageContextpageContext=(PageContext)context.getContextObject();
ValueStackstack=TagUtils.getStack(pageContext);
for(Objecto:stack.getRoot())...{
if(oinstanceofTextProvider)...{
this.textProvider=(TextProvider)o;
break;
}
}
}
}

publicStringgetMessage(Stringcode)...{
returngetMessage(code,null);
}

publicStringgetMessage(Stringcode,Object[]args)...{
//优先查找struts2的配置文件,然后再查找ec自带的配置文件
List<Object>theArgs=null;
if(args!=null)...{
theArgs=newArrayList<Object>();
for(Objectarg:args)...{
theArgs.add(arg);
}
}
Stringmessage=null;
if(this.textProvider!=null)...{
message=this.textProvider.getText(code,null,theArgs);
}
if(message==null)...{
message=defaultMessages.getMessage(code,args);
}
returnmessage;
}
}
2.在extremecomponents的配置文件中配置该实现类
本文介绍了两种将Struts2与ExtremeComponents(EC)集成的方法:间接法通过EL表达式和Struts2标签实现;直接法则通过扩展EC并自定义消息适配器完成,更加简洁高效。

3859

被折叠的 条评论
为什么被折叠?



