extremecomponents使用struts2国际化信息的方法
有两种方法来实现该功能:间接法、直接法
第一种:间接法,使用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;
}
}
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的配置文件中配置该实现类