??xml version="1.0" encoding="utf-8" standalone="yes"?> <struts> <package name="enterpriceculture" namespace="/" extends="struts-default"> 今天演示EL表达式的时候发现自己jsp的基实在是薄弱,在这个很单的问题上迷惑了很久?/p>
首先在看遇到的问题: 在浏览器地址输入Q表CZ入一个参数testQgؓ123 发现毫无l果Q再使用requestScope试取出Q?/p>
发现q是毫无l果Q感到非常诧异,遂干脆用java脚本试取出?/p>
之后发现Q若使用已下代码向request作用域赋|则用上面代码可以取出 JAVA脚本Q?/p>
l论是Q?span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #ff0000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none" class="Apple-style-span">${param.name} {h?request.getParamter("name")Q这两种Ҏ一般用于服务器从页面或者客L获取的内宏V?/span> ${requestScope.name} {h?nbsp;request.getAttribute("name")Q一般是从服务器传递结果到面Q在面中取出服务器保存的倹{?/span> 参考资料: http://topic.csdn.net/u/20090103/15/779af9b8-c3a7-4f3e-82fe-b08bf2630996.html 今天演示EL表达式的时候发现自己jsp的基实在是薄弱,在这个很单的问题上迷惑了很久?/p>
首先在看遇到的问题: 在浏览器地址输入Q表CZ入一个参数testQgؓ123 发现毫无l果Q再使用requestScope试取出Q?/p>
发现q是毫无l果Q感到非常诧异,遂干脆用java脚本试取出?/p>
之后发现Q若使用已下代码向request作用域赋|则用上面代码可以取出 JAVA脚本Q?/p>
l论是Q?span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #ff0000; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none" class="Apple-style-span">${param.name} {h?request.getParamter("name")Q这两种Ҏ一般用于服务器从页面或者客L获取的内宏V?/span> ${requestScope.name} {h?nbsp;request.getAttribute("name")Q一般是从服务器传递结果到面Q在面中取出服务器保存的倹{?/span> 参考资料: http://topic.csdn.net/u/20090103/15/779af9b8-c3a7-4f3e-82fe-b08bf2630996.html
try {
File input = new File("e:/engilish literature.doc");
docStream = new FileInputStream(input);
contentDisposition = "test.txt";
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "download";
}
<result name="success" type="dispatcher">
<param name="location">/home/register-result.jsp</param>
</result>
<result name="input">
<param name="location">/home/register.jsp</param>
</result>
<result name="download" type="stream">
<param name="contentType">application/x-msdownload</param>
<param name="inputName">docStream</param>
<param name="bufferSize">1024</param>
<param name="contentDisposition">attachment;filename="${contentDisposition}"</param>
</result>
<interceptor-ref name="params"/>
</action>
]]>web.xml
<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>com.cenin.util.filter.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
AuthorizationFilter.java
public class AuthorizationFilter implements Filter
{
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String servletPath = request.getServletPath();//获得如: /baseinfo/codeBillTypeList.action
Object user = session.getAttribute(Config.getConfig().getSessionUser());
//判断权限
boolean passed = true;
/*if(user == null && (servletPath.indexOf("action")>=0 )){
passed = false;
String[] noLimit = Config.getConfig().getNoFilter().split(";");
for(int i=0;i<noLimit.length;i++){
if(servletPath.matches(noLimit[i])){
System.out.println(servletPath + " " + noLimit[i]);
passed = true;
break;
}
}
}*/
request.getRequestDispatcher(servletPath).forward(request, response);//控制struts or xwork跌{
// if(passed)
// chain.doFilter(request, response);
// else
// {
// String modelType = request.getParameter("model.bmoduleType");
// String particalUrl = request.getParameter("particalUrl");
// session.setAttribute("model.bmoduleType", modelType);
// session.setAttribute("particalUrl", particalUrl);
// String url = Config.getConfig().getPageLogin();
// RequestDispatcher dispatcher = request.getRequestDispatcher(url);
// dispatcher.forward(request, response);
// }
}
public void init(FilterConfig filterConfig) throws ServletException
{
}
public void destroy()
{
}
}
xwork.xmld
<include file="xwork-onlinehall.xml"/>
xwork-onlinehall.xml文g内容Q?br />
<package name="onlinehall" extends="cenin" namespace="/onlinehall" externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
<action name="myOrderLoadList" class="com.cenin.web.action.onlinehall.MyOrderAction" method="myOrderLoadList">
<result name="success" type="freemarker">/onlinehall/myOrder.ftl</result>
</action>
</package>
MyOrder.java内容
public class MyOrderAction extends BaseActionSupport {
public String myOrderLoadList() throws Exception {
}
}
]]>
]]>
本节代码详细说明文g上传功能的开发流E,介绍知识点如下:
2. UploadActioncM实现上传功能Ҏ和上传文件属性介l?
3. struts.xml中UploadAction配置Q以及字W编码、文件时存放\径配|?
4. 上传后所处\径和最l上传成功后效果展示?
<!---------------------文g名:upload.jsp----------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传文g</title>
</head>
<body>
<!-- 上传文g表单定义 -->
<s:form action="upload" method="post" enctype="multipart/form-data">
<tr>
<!-- 上传文g标签定义 -->
<td>上传文g:<s:file name="file"></s:file></td>
</tr>
<tr>
<td>再次上传文g:<s:file name="file"></s:file></td>
</tr>
<tr>
<td align="left"><s:submit name="submit" value="提交"></s:submit></td>
</tr>
</s:form>
</body>
</html>
<!-------------------上传文g成功后结果页面文件名Qresult.jsp ----------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传l果</title>
</head>
<body>
上传文gQ?br />
<!-- 昄上传成功文g?nbsp;-->
<s:property value="fileFileName" />
</body>
</html>
<!------------------文g名:UploadAction.java ------------------>
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
//文g上传Action
public class UploadAction extends ActionSupport {
//上传文g存放路径
private final static String UPLOADDIR = "/upload";
//上传文g集合
private List<File> file;
//上传文g名集?/span>
private List<String> fileFileName;
//上传文g内容cd集合
private List<String> fileContentType;
public List<File> getFile() {
return file;
}
public void setFile(List<File> file) {
this.file = file;
}
public List<String> getFileFileName() {
return fileFileName;
}
public void setFileFileName(List<String> fileFileName) {
this.fileFileName = fileFileName;
}
public List<String> getFileContentType() {
return fileContentType;
}
public void setFileContentType(List<String> fileContentType) {
this.fileContentType = fileContentType;
}
public String execute() throws Exception {
for (int i = 0; i < file.size(); i++) {
//循环上传每个文g
uploadFile(i);
}
return "success";
}
//执行上传功能
private void uploadFile(int i) throws FileNotFoundException, IOException {
try {
InputStream in = new FileInputStream(file.get(i));
String dir = ServletActionContext.getRequest().getRealPath(UPLOADDIR);
File uploadFile = new File(dir, this.getFileFileName().get(i));
OutputStream out = new FileOutputStream(uploadFile);
byte[] buffer = new byte[1024 * 1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
<struts>
<!-- pȝ帔R定义Q定义上传文件字W集~码 -->
<constant name="struts.i18n.encoding" value="gb2312"></constant>
<!-- pȝ帔R定义Q定义上传文件时存放\?-->
<constant name="struts.multipart.saveDir" value="c:\"></constant>
<!-- Action所在包定义 -->
<package name="C04.4" extends="struts-default">
<!-- Action名字Q类以及D面定义 -->
<!-- 通过Actioncd理才D的的Action定义 -->
<action name="upload" class="action.UploadAction">
<result name="input">/jsp/upload.jsp</result>
<result name="success">/jsp/result.jsp</result>
</action>
</package>
</struts>
]]>
<result name="success" type="redirectAction">/admin/adminEnterpriceculturelist.action?enterpriceculture.enterpricetype=A</result>
管不好看格式,但是却很Ҏ?
W一U方式的/admin不是命名I间Q暂时我q没旉d践他Q现在有点忙..因ؓ我的命名I间是这L
<action name="adminEnterpriceculturesave" class="adminEnterpriceculturesaveAction" method="save">
<result name="success" type="redirectAction">/admin/adminEnterpriceculturelist.action?enterpriceculture.enterpricetype=A</result>
<!-- <param name="enterpriceculture.enterpricetype">A</param>
<result name="success" type="chain">
<param name="actionName">adminEnterpriceculturelist</param>
<param name="namespace">/</param>
</result>-->
<!-- <result name="success">/admin/Enterpriceculture_List.jsp</result>-->
</action>
</struts>
W二U方式:
<param name="enterpriceculture.enterpricetype">A</param>
<result name="success" type="chain">
<param name="actionName">adminEnterpriceculturelist</param>
<param name="namespace">/</param>
</result>
L命名I间因ؓ是在本文件的q个adminEnterpriceculturelistq行跌{Q所以理解v来容易很?.
l合扑ֈ|上有关资料Q如下:
chaincd 如下Q?
<action name="getTemplate" class="tabAction" method="getTemplateByParas">
<param name="objectId">${objectId}</param>
<param name="param1">${param1}</param>
<param name="items">${items}</param>
<result name="success" type="chain">
<param name="actionName">${actionName}</param>
<param name="namespace">${namespace}</param>
</result>
</action>
q样可以实C参了Q这里的参数所有对象都可以传,包括map,List,set {集合也可以。同时这里还需要注意一个小问题Qchainq种cd是XWork中的resultcd,它对应的cLQ?
com.opensymphony.xwork2.ActionChainResult . q里需要注意一个小问题Q?actionName,namespace都是他的属性,所以对于传q的URL参数要做一下处理?
actionName必须是Action的名Uͼnamespace是他命名I间Q必M"/"开_如:
/tab/getTemplate.action ?namespace="/tab" ; actionName=”getTemplate“;
]]>
]]>
]]>
el表达式不起作?/span>
今天用el表达式,老是得不到后Cq来的倹{该导入的jar包和标签库也都导入了。还是不起作用。后来在|上扑ֈ一文章。解决了。原来是版本的问题。现在脓一下?/span>
tomcat5.0的版? 使用了低版本Q只求稳定?/span>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
2.4版本默认启用el表达式,如果使用2.5版本Q默认el表达式是关闭?/span>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
那么对应2.5的web.xml --> jsp面里应该增?lt;%@ page isELIgnored="false"%>
一句话Q凡是部|描q文仉循Servlet2.4规范的WEB应用QEL表达式的计算默认是启用的Q而未遵@的,则EL表达式的计算默认是禁用的?/span>
所以解x案还可以是:web.xml中的DTD(文档cd定义)攚w2.4的版?/span>
我用的是在公共页中加?lt;%@ page isELIgnored="false"%>Q然后每个页面引入公共页。问题解决了?/span>
]]>http://localhost:8888/Test/index.jsp?test=123
在index.jsp中尝试用EL表达式取出,代码如下Q?/p>
<body>
${test}
</body> <body>
${requestScope.test}
</body> <body>
<%request.getAttribute("test"); %>
</body>
依然无解?/p>
<%
request.setAttribute("test", "123");
%>
查询资料后发玎ͼ使用以下代码可以取出之前的请求参敎ͼ
EL: <body>
${param.test}
</body> <body>
<%=request.getParameter("test") %>
</body>
el表达式中?{param}
]]>http://localhost:8888/Test/index.jsp?test=123
在index.jsp中尝试用EL表达式取出,代码如下Q?/p>
<body>
${test}
</body> <body>
${requestScope.test}
</body> <body>
<%request.getAttribute("test"); %>
</body>
依然无解?/p>
<%
request.setAttribute("test", "123");
%>
查询资料后发玎ͼ使用以下代码可以取出之前的请求参敎ͼ
EL: <body>
${param.test}
</body> <body>
<%=request.getParameter("test") %>
</body>
el表达式中?{param}
]]>
框架搭徏好后Q启动服务器出现如下的信息:
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester).
log4j:WARN Please initialize the log4j system properly.
2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2009-11-6 21:39:17 org.apache.catalina.core.StandardContext start
严重: Context startup failed due to previous errors
2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install
信息: Installing web application at context path /tomcat-docs from URL file:D:/server/Tomcat 5.0/webapps/tomcat-docs
2009-11-6 21:39:17 org.apache.catalina.core.StandardHostDeployer install
信息: Installing web application at context path /webdav from URL file:D:/server/Tomcat 5.0/webapps/webdav
。。。?br />
可能出错的地方:
1.web.xml文g web应用部v描述W,里面的部|的xml文g或者类Q如果这些找不到׃发生startup failed due to previous errors错误?br />
2.如果在应用spring的话Q在配置文gapplicationContext.xml中定义的cRxml文g找不C会报q个错误?br />
3.在web.xmlQstruts.xmlQapplicationContext.xml文g中自w有M一炚w误都可能引v上面的这个问题,而不仅仅是附带的文g错误D?br />
4.如果使用ibatis的话Q在SqlMapConfig.xml中定义的xml文g找不C会报q个错误。(hibernate的配|在整合spring的时候用spring的配|文Ӟ
5.JDK的版本问题,最好用JDK5.0 或者更高的版本?br />
6.Eclipse和tomcat的版本兼定w?br />
7.框架整合的过E中在导入到lib下的jar包冲H也可能产生该错误?br />
8.jar包的~少以及jar包的版本也可产生该错误?br />
9.其他的原?br />
解决该问题的途径Q?br />
׃上面问题可能已经是web服务器内部生了错误Q而且IDE中的Log信息较少Q问题的解决很难入手?br />
而该问题的生经怼D面跌{L不到文g?Http 404 错误。。。。?br />
可以通过在tomcat中添加log文g来让log信息提示的更_一些,卌|log输出的等U?br />
1.tomcat的安装\径下tomcat home下的common文g夹下的classes文g夹中创徏log4j.properties文gQ即
。。。Apache Software Foundation/Tomcat 5.5/common/classes
log4j.properties配置如下Q配|是转蝲Q:
log4j.rootLogger=info,Console,R
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n
log4j.logger.org.apache=info,R
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
log4j.logger.org.apache.catalina.core=info,R
log4j.logger.org.apache.catalina.session=info,R
2.log4j-1.2.15.jar和commons-logging.jar包拷贝到。。。Apache Software Foundation/Tomcat 5.5/common/lib下即可?br />
做好上面两步Q启动服务器的时候,会在tomcat的安装\径下的。。Apache Software Foundation/Tomcat 5.5/logs下自动的
生成tomcat.log文g以记录日志信息?br />
注:tomcat.log文g中的日志信息会记载很多,如果q大可能生磁盘空间不的问题Q徏议定时的清除日志信息?br />
通过上面的日志文件信息可以定位到比较具体的问题根源,在仔l的查看问题一一ȝ卛_解决?br />
我在搭徏框架之后Q在web.xml文g中配|的Ƣ迎面昄的时候报404的错误,通过上面的途径扑ֈ了两个错误,虽然׃两天的时_最l还是解决了?br />
在struts.xml中配|了<constant name="struts.devMode" value="true"/> (据说配置?lt;constant name="struts.configuration.xml.reload" value="true"/>也会报错Q这个我没试q)
时启动tomcat报错?br />org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.java:209)
at com.opensymphony.xwork2.util.FileManager.fileNeedsReloading(FileManager.java:60)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.needsReload(XmlConfigurationProvider.java:325)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.needsReload(StrutsXmlConfigurationProvider.java:168)
at com.opensymphony.xwork2.config.ConfigurationManager.conditionalReload(ConfigurationManager.java:220)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:774)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:191)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2009-2-4 22:40:54 org.apache.catalina.core.StandardContext start
严重: Context [/Struts2Demo2] startup failed due to previous errors
|上解决办法QdevMode模式是开发模式,开启它则默认开启了i18n.reload?configuration.xml.reload。这个错误是׃configuration.xml.reload讄为true倒置的,但是|上的资料没有说明原因及解决办法Q倒是一个国外的apache相关BBS上有q是216版本的BUG,q且附上了一?patch修正文gQ说217版本会修正。。。可我不会用也不知道是不是这个原因,q个问题׃直搁|在q里了。过了几个月Q也是最q网上查了下发现在apache的一个邮件列表中有关于这个的解释Q?/span>原因很简单,tomcat的安装\径包含空格我的成功的办法:据说q是struts2.1.6的bugQ换新版?.1.8okQ当然还要相应的xwork版本Q好像是xwork2.1.6Q我原来的2个旧jar包换成新的就ok了?/span>。。。无语啊。。。一试果然如此?br />
注意:2个jar包换了之后重启tomcat可能会报错, Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jarQ这个错误是开始那个引LQ把tomcat中相应项目删除了Q重新部|就没问题了
下面?个开发模式常用配|的?--Q来自http://hi.baidu.com/12261016/blog/item/1d7f6ccaded7248ec91768ec.htmlQ?br /> <!-- 开启用开发模式,详细错误提示 -->
<!-- <constant name="struts.devMode" value="true"/>-->
<!-- 指定每次h到达Q重新加载资源文?-->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文g更改后,自动重新加蝲 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用样式表缓?-->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->
一Q?span style="color:red">准备资源文gQ资源文件的命名格式如下Q?/span>
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名,我们可以自定义,?/span>language?/span>country必须?/span>java支持的语a和国家。如Q?/span>
中国大陆Q?/span>baseName_zh_CN.properties
国Q?/span>baseName_en_US.properties
现在为应用添加两个资源文Ӟ
二:准备好资源文件后Q配|?/span>struts.xml文g
struts.custom.i18n.resources帔R把资源文件定义ؓ全局资源文gQ?/span>
<constant name="struts.custom.i18n.resources" value="itcast"/>
Itcast源文件的基本名?/span>
三:后面我们可以在页面或action中访问国际化信息Q?/span>
1?/span>JSP面中?/span><s:text name=””/>标签输出国际化信息?/span>
name源文件中?/span>key?/span>
2?/span>action cMQ可以?/span>ActionSupportQ?/span>getText(“key”)Ҏ得到国际
化信息,该方法的W一个参数用于指定资源文件中?/span>key?/span>
3在表单标{中Q通过key属性指定资源文件中?/span>keyQ如Q?/span>
<s:textfield name=”realname” key=”user”/>
public void setPerson(Person person) {
this.person = person;
}
<body>
id=${person.id}<br>
name=${person.name}
</body>
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
freemarker-2.3.16.jar
javassist-3.11.0.GA.jar
ognl-3.0.1.jar
struts2-core-2.2.3.1.jar
xwork-core-2.2.3.1.jar
最重要的是qx我们看普通的文章的话说struts2的架包就需要那五个Q但是这栯?br />
来的E序Q对于我的配|,
tomcat apache-tomcat-6.0.32
会出错,