??xml version="1.0" encoding="utf-8" standalone="yes"?>日本精品二区,97国产精品视频人人做人人爱,国产一二精品视频http://www.aygfsteel.com/jjshcc/category/45366.htmlzh-cnSun, 02 Sep 2012 20:34:21 GMTSun, 02 Sep 2012 20:34:21 GMT60OGNL表达式struts2标签?Q?Q?”的区别http://www.aygfsteel.com/jjshcc/archive/2012/09/02/386814.htmlEric_jiangEric_jiangSun, 02 Sep 2012 13:12:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/09/02/386814.htmlhttp://www.aygfsteel.com/jjshcc/comments/386814.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/09/02/386814.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386814.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386814.html
OGNLQObject-Graph Navigation LanguageQ,大概可以理解为:(x)对象囑Ş化导航语a。是一U可以方便地操作对象属性的开源表辑ּ语言。OGNL有如下特点:(x)

1、支持对象方法调用,形式如:(x)objName.methodName()Q?br />
2、支持类静态的Ҏ(gu)调用和D问,表达式的格式为@[cd名(包括包\Q]@[Ҏ(gu)?| 值名]Q例如:(x)

@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAMEQ?br />
3、支持赋值操作和表达式串联,例如Q?br />
price=100, discount=0.8, calculatePrice()Q这个表辑ּ?x)返?0Q?br />
4、访问OGNL上下文(OGNL contextQ和ActionContextQ?br />
5、操作集合对象?br />


二、用OGNL表达?br />
OGNL要结合struts标签来用。由于比较灵z,也容易把人给弄晕Q尤其是“%”?#8220;#”?#8220;$”q三个符L(fng)使用。由?q泛应用于EL中,q里重点??W号的用法?br />
1?#8220;#”W号有三U用途:(x)

(1)、访问非根对象(struts中值栈为根对象Q如OGNL上下文和Action上下文,#相当于ActionContext.getContext()Q下表有几个ActionContext中有用的属性:(x)

parameters
包含当前HTTPh参数的Map
#parameters.id[0]作用相当于request.getParameter("id")

request
包含当前HttpServletRequest的属性(attribute)的Map
#request.userName相当于request.getAttribute("userName")

session
包含当前HttpSession的属性(attributeQ的Map
#session.userName相当于session.getAttribute("userName")

application
包含当前应用的ServletContext的属性(attributeQ的Map
#application.userName相当于application.getAttribute("userName")


注:(x)attr 用于按request > session > application序讉K其属性(attributeQ,#attr.userName相当于按序在以上三个范_(d)scopeQ内d userName属性,直到扑ֈ为止。用于过滤和投媄(jing)Qprojecting)集合Q如books.{?#this.price<100}Q构?MapQ如#{'foo1':'bar1', 'foo2':'bar2'}?br />
(2)、用于过滤和投媄(jing)Qprojecting)集合Q如: books.{?#this.price>35}

books.{?#this.price>35}

(3)、构造MapQ如: #{'foo1':'bar1', 'foo2':'bar2'}

#{'foo1':'bar1', 'foo2':'bar2'}q种方式常用在给radio或select、checkbox{标{赋g。如果要在页面中取一个map的值可以这样写Q?br />
<s:property value="#myMap['foo1']"/>

<s:property value="#myMap['foo1']"/>

2?#8220;%”W号的用途是在标{属性D理解为字W串cdӞ告诉执行环境%{}里的是OGNL表达式。很有点cMjavascript里面的eval_r()功能Q例如:(x)

var oDiv = eval_r("document.all.div"+index)

var oDiv = eval_r("document.all.div"+index)

当index变量?Ӟ语句׃(x)被当作var oDiv = document.all.div1
var oDiv = document.all.div1来执行?{}是赯个作用。D例:(x)

<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/> W??br />
<s:property value="#myMap['key1']"/> W??br />
<s:url value="#myMap['key1']" />    W??br />
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/> W??br />
<s:property value="#myMap['key1']"/> W??br />
<s:url value="#myMap['key1']"/> W??br />
上面的代码第2行会(x)在页面上输出“value1”Q而第3行则?x)输?#myMap['key1']"q么一个字W串。如果将W?行改写成q样Q?br />
<s:url value="%{#myMap['key1']}"/>

<s:url value="%{#myMap['key1']}"/>

则输Zؓ(f)“value1”?br />




q说明struts2里不同的标签对ognl的表辑ּ的理解是不一L(fng)。如果当有的标签“看不?#8221;cM“#myMap['key1']”的语句时Q就要用%{}来把q括q去Q?#8220;译”一下了?br />
3?#8220;$”有两U用?br />
(1)、在国际化资源文件中Q引用OGNL表达式?br />
(2)、在Struts 2配置文g中,引用OGNL表达式:(x)

<action name="saveUser" class="userAction" method="save">

<result type="redirect">listUser.action?msg=${msg}</result>

</action>

<action name="saveUser" class="userAction" method="save">

<result type="redirect">listUser.action?msg=${msg}</result>

</action>


Eric_jiang 2012-09-02 21:12 发表评论
]]>
Struts2的国际化 http://www.aygfsteel.com/jjshcc/archive/2012/09/01/386773.htmlEric_jiangEric_jiangSat, 01 Sep 2012 15:16:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/09/01/386773.htmlhttp://www.aygfsteel.com/jjshcc/comments/386773.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/09/01/386773.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386773.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386773.htmlStruts2的国际化
资源文g的命名:(x)basename_language_country.properties
JAVA国际?br />如果pȝ同时存在资源文g、类文gQ系l将以类文gZQ而不?x)调用资源文件?br />对于体中文的LocaleQResourceBundle搜烦(ch)资源的顺序是Q?br />(1)baseName_zh_CN.class
(2)baseName_zh_CN.properties
(3)baseName_zh.class
(4)baseName_zh.properties
(5)baseName.class
(6)baseName.properties

 
Struts2的国际化入门

Struts2国际化是建立在Java国际化的基础上的Q一h通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle
加蝲指定Locale对应的资源文Ӟ再取得该资源文g中指定key对应的消?-整个q程与JAVAE序的国家化完全相同Q只?br />Struts2框架对JAVAE序国际化进行了q一步封装,从而简化了应用E序的国际化?br />Struts2需要国际化的部?br />cd转换:
数据校验:
验证框架xml配置文g的国际化QRegisterAction-validation.xml文g<message key="username.xml.invalid"/>

JSP面的国际化Q?lt;s:text name="addUser"/>

Action的国际化:利用ActionSupportcL供的getText()Ҏ(gu).

 

Struts2中加载全局资源文g

struts.xml
<constant name="struts.custom.i18n.resources" value="baseName"/>
?br />struts.properties
struts.custom.i18n.resources=baseName


讉K国际化消?/p>

Struts2讉K国际化消息主要有如下三种方式Q?br />(1)JSP面Q?lt;s:text name="key"/>
(2)ActioncMQ用ActionSupportcȝgetTextҎ(gu)?br />(3)表单元素的Label里:(x)单元素指定一个key属?/p>

输出带占位符的国际化消息

Struts2中提供了如下两种方式来填充消息字W串中的占位W?/p>

(1)JSP面Q在<s:text.../>标签中用多?lt;s:param.../>标签来填充消息中的占位符?br />(2)Action中,在调用getTextҎ(gu)时用getText(String aTextName,List args)或getText(String key, String[] args)Ҏ(gu)来填充占位符?br />除此之外QStruts2q提供了对占位符的一U替代方式,q种方式允许在国际化消息资源文g中用表辑ּQ对于这U方式,则可避免在用国际化消息时还需要ؓ(f)占位W传入参?/p>

倹{?/p>

如下在消息资源中使用表达?br />succTip=${username}, Ƣ迎, (zhn)已l登?
在上面的消息资源中,通过使用表达式,可以从ValueStack中取username属性|自动填充到该消息资源中?/p>

加蝲资源文g的方?br />(1)加蝲全局资源文gQ?<constant name="struts.custom.i18n.resources" value="baseName"/>
(2)包范围资源文?Qؓ(f)Struts2指定包范围资源文件的Ҏ(gu)?在包的根路径下徏立多个文件名为package_language_country.properties的文Ӟ一旦徏立了
   q个pd的国际化资源文gQ应用中处于该包下的所有Action都可以访问该资源文g。需要注意的是上面的包范围资源文件的baseName是packageQ不是Action所在的包名?br />(3)Action范围资源文gQ在ActioncL件所在的路径建立多个文g名ؓ(f)ActionName_language_country.properties的文件?br />(4)临时指定资源文gQ?lt;s:i18n.../>标签的name属性指定(f)时的国际化资源文?/p>

加蝲资源文g的顺?br />Action中加载资源文Ӟ假设我们在某个ChildAction中调用了getText("user.title")QStruts 2.0的将?x)执行以下的操作Q?br />(1)优先加蝲pȝ中保存在ChildAction的类文g相同位置Q且baseName为ChildAction的系列资源文件?br />(2)如果?1)中找不到指定key对应的消息,且ChildAction有父cParentActionQ则加蝲pȝ中保存在ParentAction的类文g相同位置Q且
   baseName为ParentAction的系列资源文件?br />(3)如果?2)中找不到指定key对应的消息,且ChildAction有实现接口IChildActionQ则加蝲pȝ中保存在IChildAction的类文g相同位置Q且
   baseName为IChildAction的系列资源文件?br />(4)如果?3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即用模型驱动模?Q则对于getModel()Ҏ(gu)q回的model对象Q?br />   重新执行W?1)步操作?br />(5)如果?4)中找不到指定key对应的消息,则查扑ֽ前包下baseName为package的系列资源文件?br />(6)如果?5)中找不到指定key对应的消息,则沿着当前包上溯,直到最层包来查找baseName为package的系列资源文件?br />(7)如果?6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources帔R指定baseName的系列资源文件?br />(8)如果l过上面的步骤一直找不到key对应的消息,直接输key的字W串倹{?/p>


对于在JSP中访问国际化消息Q则单的多,他们又可以分ZUŞ式:(x)
(1)对于使用<s:i18n.../>标签作ؓ(f)父标{<s:text.../>标签、表单标{形式Q?br />   a、将?lt;s:i18n.../>标签指定的国际化资源文g中加载指定key对应的消息?br />   b、如果在a中找不到指定key对应的消息,则查找struts.custom.i18n.resources帔R指定baseName的系列资源文件?br />   c、如果经q上面步骤一直找不到该key对应的消息,直接输key的字W串倹{?/p>

(2)如果<s:text.../>标签、表单标{没有?lt;s:i18n.../>标签作ؓ(f)父标{:(x)
    直接加蝲struts.custom.i18n.resources帔R指定baseName的系列资源文件。如果找不到该key对应的消息,直接输key的字W串倹{?/p>

 

允许用户自行选择E序语言

Struts2国际化的q行机制
    在Struts2中,可以通过ActionContext.getContext().setLocale(Locale arg)讄用户的默认语a?br />Z化设|用户默认语a环境QStruts2提供了一个名为i18n的拦截器(Interceptor),q且其注册在默认的拦截器中(defaultStack)?br />    i18n拦截器在执行ActionҎ(gu)前,自动查找h中一个名为request_locale的参数。如果该参数存在Q拦截器将其作为参敎ͼ转换成Locale对象Q?br />q将其设为用户默认的Locale(代表国家/语言环境)?br /> 除此之外Qi18n拦截器还?x)将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名?br />WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale会(x)作ؓ(f)览者的默认Locale?br /><%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script. type="text/javascript">
function langSelecter_onChanged()
{
 document.getElementById("langForm").submit();
}
</script>
<%-- 讄SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性?--%>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<%-- 使用lee.Locales创徏locales实例 --%>
<s:bean id="locales" name="lee.Locales">
 <%-- 为locales实例传入current参数|如果SESSION_LOCALE为空Q则q回ValueStack中locale属性?即用h览器讄的Locale) --%>
 <s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>

<%-- 让用户选择语言的表?--%>
<form. action="<s:url/>" id="langForm"
    style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
    <s:text name="languag"/>
 <s:select label="Language" list="#locales.locales" listKey="value" listValue="key"
        value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
        name="request_locale" id="langSelecter"
        nchange="langSelecter_onChanged()" theme="simple"/>
</form>

在其他页面中包含该页?

<s:include value="selectlanguage.jsp"/>
在struts.xml文g中增加Action通配W的配置Q?br /><?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 <constant name="struts.custom.i18n.resources" value="messageResource"/>
 <constant name="struts.i18n.encoding" value="GBK"/>
    <package name="lee" extends="struts-default">
  <!-- 使用通配W定义Action的name -->
  <action name="*">
   <!-- 请求{发给/WEB-INF/jsp/路径下同名的JSP面 -->
   <result>/WEB-INF/jsp/{1}.jsp</result>
  </action>
    </package>
</struts>



Eric_jiang 2012-09-01 23:16 发表评论
]]>
Struts2拦截器的使用http://www.aygfsteel.com/jjshcc/archive/2012/08/31/386699.htmlEric_jiangEric_jiangFri, 31 Aug 2012 07:59:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/08/31/386699.htmlhttp://www.aygfsteel.com/jjshcc/comments/386699.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/08/31/386699.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386699.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386699.html阅读全文

Eric_jiang 2012-08-31 15:59 发表评论
]]>
Struts2自定义拦截器实例—登陆权限验?http://www.aygfsteel.com/jjshcc/archive/2012/08/29/386518.htmlEric_jiangEric_jiangWed, 29 Aug 2012 06:31:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/08/29/386518.htmlhttp://www.aygfsteel.com/jjshcc/comments/386518.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/08/29/386518.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386518.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386518.html

版本Qstruts2.1.6

此实例实现功能:(x)用户需要指定用户名登陆Q登陆成功进入相应页面执行操作,否则q回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的面Q时则不允许Q须q回登陆面?/p>

代码如下Q?/p>

一、页?/p>

login.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>    
  6.     <title>yuewei'Login</title>   
  7.     <!-- 
  8.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  9.     -->  
  10.   </head>  
  11.     
  12.   <body>  
  13.   <form action="login.action" method="post">  
  14.   User:<input type="text" name="username"><br>  
  15.   Passoword:<input type="password" name="password"><br>  
  16.   <input type="submit" value="submit">  
  17.   </form>  
  18.      
  19. </body>  
  20. </html>  

welcome.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  3. <html>  
  4.   <head>  
  5.      
  6.     <title> yuewei's Welcome</title>  
  7.       
  8.  <!-- 
  9.  <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  10.  -->  
  11.   
  12.   </head>  
  13.     
  14.   <body>  
  15.   <h1>d成功后显C此面</h1>  
  16.   <a href="show.action" mce_href="show.action">show</a>  
  17.   </body>  
  18. </html>  

show.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.       
  7.     <title>yuewei's Show</title>  
  8.       
  9.     <!-- 
  10.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  11.     -->  
  12.   
  13.   </head>  
  14.     
  15.   <body>  
  16.     Show This Page   
  17.         d后执行此面<br>  
  18.   </body>  
  19. </html>  

 

二、Action

LoginFormAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class LoginFormAction extends ActionSupport {  
  6.     public String exexcute() {  
  7.         return "success";  
  8.     }  
  9. }  

LoginAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionSupport;  
  5. import com.ywjava.utils.Constants;  
  6.   
  7. public class LoginAction extends  ActionSupport{  
  8. private String username;  
  9. private String password;  
  10. public String getPassword() {  
  11.     return password;  
  12. }  
  13. public void setPassword(String password) {  
  14.     this.password = password;  
  15. }  
  16. public String getUsername() {  
  17.     return username;  
  18. }  
  19. public void setUsername(String username) {  
  20.     this.username = username;  
  21. }  
  22.   
  23. private boolean isInvalid(String value) {     
  24.     return (value == null || value.length() == 0);     
  25. }     
  26. public String execute(){  
  27.         System.out.println(username);  
  28.         System.out.println(password);  
  29.           
  30.          if (isInvalid(getUsername()))     
  31.                 return INPUT;     
  32.         
  33.             if (isInvalid(getPassword()))     
  34.                 return INPUT;     
  35.         
  36.   
  37.     if(this.getUsername().equals("yuewei")&& this.getPassword().equals("yuewei")){  
  38.         ActionContext.getContext().getSession().put(Constants.USER_SESSION,getUsername());  
  39.         ActionContext.getContext().getSession().put(Constants.PASS,getPassword());  
  40.         return "success";  
  41.     }  
  42.     return "error";  
  43. }  
  44. }  

ShowAction

  1. package com.ywjava.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4.   
  5. public class ShowAction extends ActionSupport {  
  6.  public String execute() {  
  7.   return "success";  
  8.  }  
  9. }  

三、拦截器

  1. package com.ywjava.interceptot;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.opensymphony.xwork2.Action;  
  6. import com.opensymphony.xwork2.ActionContext;  
  7. import com.opensymphony.xwork2.ActionInvocation;  
  8. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  9. import com.ywjava.utils.Constants;  
  10.   
  11. public class LoginInterceptor extends AbstractInterceptor {  
  12.   
  13.     @Override  
  14.     public String intercept(ActionInvocation invocation) throws Exception {  
  15.   
  16.         // 取得h相关的ActionContext实例  
  17.         ActionContext ctx = invocation.getInvocationContext();  
  18.         Map session = ctx.getSession();  
  19.         String user = (String) session.get(Constants.USER_SESSION);  
  20.   
  21.         // 如果没有登陆Q或者登陆所有的用户名不是yueweiQ都q回重新登陆  
  22.   
  23.         if (user != null && user.equals("yuewei")) {  
  24.             System.out.println("test");  
  25.             return invocation.invoke();  
  26.         }  
  27.   
  28.         ctx.put("tip", "你还没有d");  
  29.         return Action.LOGIN;  
  30.   
  31.     }  
  32.   
  33. }  

?struts.xml

[c-sharp] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <package name="authority" extends="struts-default">  
  7.       
  8.         <!-- 定义一个拦截器 -->  
  9.         <interceptors>  
  10.             <interceptor name="authority"  
  11.                 class="com.ywjava.interceptot.LoginInterceptor">  
  12.             </interceptor>  
  13.             <!-- 拦截器栈 -->  
  14.             <interceptor-stack name="mydefault">  
  15.                 <interceptor-ref name="defaultStack" />  
  16.                 <interceptor-ref name="authority" />  
  17.             </interceptor-stack>  
  18.         </interceptors>  
  19.   
  20.         <!-- 定义全局Result -->  
  21.         <global-results>  
  22.             <!-- 当返回login视图名时Q{?login.jsp面 -->  
  23.             <result name="login">/login.jsp</result>  
  24.         </global-results>  
  25.   
  26.         <action name="loginform"  
  27.             class="com.ywjava.action.LoginFormAction">  
  28.             <result name="success">/login.jsp</result>  
  29.         </action>  
  30.           
  31.         <action name="login" class="com.ywjava.action.LoginAction">  
  32.             <result name="success">/welcome.jsp</result>  
  33.             <result name="error">/login.jsp</result>  
  34.             <result name="input">/login.jsp</result>  
  35.         </action>  
  36.   
  37.         <action name="show" class="com.ywjava.action.ShowAction">  
  38.             <result name="success">/show.jsp</result>  
  39.             <!-- 使用此拦截器 -->  
  40.             <interceptor-ref name="mydefault" />  
  41.         </action>  
  42.           
  43.     </package>  
  44. </struts> 


Eric_jiang 2012-08-29 14:31 发表评论
]]>
OGNL http://www.aygfsteel.com/jjshcc/archive/2012/08/29/386516.htmlEric_jiangEric_jiangWed, 29 Aug 2012 06:18:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/08/29/386516.htmlhttp://www.aygfsteel.com/jjshcc/comments/386516.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/08/29/386516.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386516.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386516.html<li>讉K值栈中的action的普通属? username = <s:property value="username"/> </li>

<li>讉K值栈中对象的普通属?get setҎ(gu))Q?lt;s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>

<li>讉K值栈中对象的普通属?get setҎ(gu)): <s:property value="cat.friend.name"/></li>

<li>讉K值栈中对象的普通方法:(x)<s:property value="password.length()"/></li>

<li>讉K值栈中对象的普通方法:(x)<s:property value="cat.miaomiao()" /></li>

<li>讉K值栈中action的普通方法:(x)<s:property value="m()" /></li>

<hr />

<li>讉K静态方法:(x)<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>

<li>讉K静态属性:(x)<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>

<li>讉KMathcȝ静态方法:(x)<s:property value="@@max(2,3)" /></li>

<hr />

<li>讉K普通类的构造方法:(x)<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>

<hr />

<li>讉KList:<s:property value="users"/></li>

<li>讉KList中某个元?<s:property value="users[1]"/></li>

<li>讉KList中元素某个属性的集合:<s:property value="users.{age}"/></li>

<li>讉KList中元素某个属性的集合中的特定?<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>

<li>讉KSet:<s:property value="dogs"/></li>

<li>讉KSet中某个元?<s:property value="dogs[1]"/></li>

<li>讉KMap:<s:property value="dogMap"/></li>

<li>讉KMap中某个元?<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>

<li>讉KMap中所有的key:<s:property value="dogMap.keys"/></li>

<li>讉KMap中所有的value:<s:property value="dogMap.values"/></li>

<li>讉K容器的大:(x)<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>

<hr />

<li>投媄(jing)(qo(h))Q?lt;s:property value="users.{?#this.age==1}[0]"/></li>

<li>投媄(jing)Q?lt;s:property value="users.{^#this.age>1}.{age}"/></li>

<li>投媄(jing)Q?lt;s:property value="users.{$#this.age>1}.{age}"/></li>

<li>投媄(jing)Q?lt;s:property value="users.{$#this.age>1}.{age} == null"/></li>

<hr />

<li>[]:<s:property value="[0].username"/></li>

Eric_jiang 2012-08-29 14:18 发表评论
]]>
如何自定义Struts2表单验证后的错误信息昄格式/样式http://www.aygfsteel.com/jjshcc/archive/2012/08/28/386463.htmlEric_jiangEric_jiangTue, 28 Aug 2012 14:17:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2012/08/28/386463.htmlhttp://www.aygfsteel.com/jjshcc/comments/386463.htmlhttp://www.aygfsteel.com/jjshcc/archive/2012/08/28/386463.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/386463.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/386463.html阅读全文

Eric_jiang 2012-08-28 22:17 发表评论
]]>
Struts 2, 值在验证p|回到原来面的时候会(x)丢失的解x?/title><link>http://www.aygfsteel.com/jjshcc/archive/2010/08/03/327870.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Tue, 03 Aug 2010 13:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/jjshcc/archive/2010/08/03/327870.html</guid><wfw:comment>http://www.aygfsteel.com/jjshcc/comments/327870.html</wfw:comment><comments>http://www.aygfsteel.com/jjshcc/archive/2010/08/03/327870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jjshcc/comments/commentRss/327870.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jjshcc/services/trackbacks/327870.html</trackback:ping><description><![CDATA[<p>比如Q当我要d一个信用卡的时候,我需要信用卡的CardType, q些数据是存在数据库中的Q我要先通过action 的一?createҎ(gu)Q取C用卡的类型:(x)</p> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_22_123_Open_Image" alt="" align="top" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_22_123_Closed_Image" alt="" style="display: none;" align="top" /><span style="color: #0000ff;">public</span><span style="color: #000000;"> String create()</span><span style="color: #000000;">{<br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />        creditCardTypeList <span style="color: #000000;">=</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.creditCardTypeService.getList();<br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />       <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> SUCCESS;<br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div> </div>   <p>Struts的配|文Ӟ(x)</p> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><</span><span style="color: #800000;">action </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="create"</span><span style="color: #ff0000;"> method</span><span style="color: #0000ff;">="create"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="example.CreditCardAction"></span><span style="color: #000000;"><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />     </span><span style="color: #0000ff;"><</span><span style="color: #800000;">result </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="success"</span><span style="color: #0000ff;">></span><span style="color: #000000;">input.jsp</span><span style="color: #0000ff;"></</span><span style="color: #800000;">result</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;"></</span><span style="color: #800000;">action</span><span style="color: #0000ff;">></span></div> </div> <br /> <p>input.jsp</p> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div>...<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><br /> <</span><span style="color: #800000;">s:select </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="creditCard.creditCardTypeId"</span><span style="color: #ff0000;"> list</span><span style="color: #0000ff;">="creditCardTypeList"</span><span style="color: #ff0000;"> listKey</span><span style="color: #0000ff;">="creditCardTypeId"</span><span style="color: #ff0000;"> <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                listValue</span><span style="color: #0000ff;">="ccType"</span> <span style="color: #0000ff;">/></span><span style="color: #000000;"> <br /> ....</span></div> </div> <br /> <p>当提交input.jsp 的时?Validate (g)查没有通过Q这时我需要回到input.jspQ此时应该下拉列表框的CreditType应该被保?只需要在<span style="color: #0000ff;">example.CreditCardAction 实现 </span><span style="color: #0000ff;">Preparable接口Qƈ实现prepare Ҏ(gu)Q然后在add?action中加?/span></p> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="prepare"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/></span></div> </div> 可以了<br /> prepareҎ(gu)Q? <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_21_84_Open_Image" alt="" align="top" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_21_84_Closed_Image" alt="" style="display: none;" align="top" /><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> prepare()</span><span style="color: #000000;">{<br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" alt="" align="top" />    creditCardTypeList <span style="color: #000000;">=</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.creditCardTypeService.getList(); <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div> </div> <br /> Add Acton:<br /> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><</span><span style="color: #800000;">action </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="add"</span><span style="color: #ff0000;"> method</span><span style="color: #0000ff;">="add"</span><span style="color: #ff0000;"> class</span><span style="color: #0000ff;">="example.CreditCardAction"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="prepare"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">result </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="input"</span><span style="color: #0000ff;">></span><span style="color: #000000;">input.jsp</span><span style="color: #0000ff;"></</span><span style="color: #800000;">result</span><span style="color: #0000ff;">></span><span style="color: #000000;">            <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">result </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="success"</span><span style="color: #ff0000;"> type</span><span style="color: #0000ff;">="redirect-action"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />            </span><span style="color: #0000ff;"><</span><span style="color: #800000;">param </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="namespace"</span><span style="color: #0000ff;">></span><span style="color: #000000;">/credit</span><span style="color: #0000ff;"></</span><span style="color: #800000;">param</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />        </span><span style="color: #0000ff;"><</span><span style="color: #800000;">param </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="actionName"</span><span style="color: #0000ff;">></span><span style="color: #000000;">list</span><span style="color: #0000ff;"></</span><span style="color: #800000;">param</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"></</span><span style="color: #800000;">result</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /></span><span style="color: #0000ff;"></</span><span style="color: #800000;">action</span><span style="color: #0000ff;">></span></div> </div> <br /> <p>  q样Q在验证前将首先调用 prepareҎ(gu)Q即使失败了回到input.jsp面creditCardType选择框的g然存在?/p> <p><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">/> <span style="color: #000000;">中的 defaultStack 是我们在struts.xml 中配|的Q其中我们注释掉?</span></span><span style="color: #000000;"><interceptor-ref name="prepare"/> q样在example.CreditCardAction中的其他Action׃?x)首先执行prepareҎ(gu)Q只有加上了 <interceptor-ref name="prepare"/> 的才?x)去首先执?prepareҎ(gu)?/span></p> <span style="color: #000000;"> <div style="padding: 4px 5.4pt; background: none repeat scroll 0% 50% #e6e6e6; width: 95%;"> <div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #0000ff;"><</span><span style="color: #800000;">package </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="project-default"</span><span style="color: #ff0000;"> abstract</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;"> extends</span><span style="color: #0000ff;">="struts-default"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />         </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptors</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />         </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-stack </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultStack"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="exception"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="alias"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="servletConfig"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #008000;"><!--</span><span style="color: #008000;">                           <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                <interceptor-ref name="prepare"/><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                 </span><span style="color: #008000;">--></span><span style="color: #000000;">                              <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="i18n"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="chain"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="debugging"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="profiling"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="scopedModelDriven"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="modelDriven"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="fileUpload"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #008000;"><!--</span><span style="color: #008000;"> <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                <interceptor-ref name="checkbox">  <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                       <param name="uncheckedValue">no</param>  <br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </interceptor-ref><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="staticParams"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="params"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                  </span><span style="color: #0000ff;"><</span><span style="color: #800000;">param </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeParams"</span><span style="color: #0000ff;">></span><span style="color: #000000;">dojo..*</span><span style="color: #0000ff;"></</span><span style="color: #800000;">param</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"></</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="conversionError"</span><span style="color: #0000ff;">/></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="validation"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">param </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeMethods"</span><span style="color: #0000ff;">></span><span style="color: #000000;">input,back,cancel,browse</span><span style="color: #0000ff;"></</span><span style="color: #800000;">param</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"></</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"><</span><span style="color: #800000;">interceptor-ref </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="workflow"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                    </span><span style="color: #0000ff;"><</span><span style="color: #800000;">param </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="excludeMethods"</span><span style="color: #0000ff;">></span><span style="color: #000000;">input,back,cancel,browse</span><span style="color: #0000ff;"></</span><span style="color: #800000;">param</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />                </span><span style="color: #0000ff;"></</span><span style="color: #800000;">interceptor-ref</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />            </span><span style="color: #0000ff;"></</span><span style="color: #800000;">interceptor-stack</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />       </span><span style="color: #0000ff;"></</span><span style="color: #800000;">interceptors</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" alt="" align="top" />    </span><span style="color: #0000ff;"></</span><span style="color: #800000;">package</span><span style="color: #0000ff;">></span><span style="color: #000000;">  <br /> </span></div> </div> </span> <img src ="http://www.aygfsteel.com/jjshcc/aggbug/327870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-08-03 21:56 <a href="http://www.aygfsteel.com/jjshcc/archive/2010/08/03/327870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2上传文g、生成羃略图、添加文字和囄水印http://www.aygfsteel.com/jjshcc/archive/2010/07/14/326133.htmlEric_jiangEric_jiangWed, 14 Jul 2010 13:26:00 GMThttp://www.aygfsteel.com/jjshcc/archive/2010/07/14/326133.htmlhttp://www.aygfsteel.com/jjshcc/comments/326133.htmlhttp://www.aygfsteel.com/jjshcc/archive/2010/07/14/326133.html#Feedback0http://www.aygfsteel.com/jjshcc/comments/commentRss/326133.htmlhttp://www.aygfsteel.com/jjshcc/services/trackbacks/326133.html阅读全文

Eric_jiang 2010-07-14 21:26 发表评论
]]>
JSP面获取ValueStack中的?/title><link>http://www.aygfsteel.com/jjshcc/archive/2010/06/30/324924.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 30 Jun 2010 13:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/jjshcc/archive/2010/06/30/324924.html</guid><wfw:comment>http://www.aygfsteel.com/jjshcc/comments/324924.html</wfw:comment><comments>http://www.aygfsteel.com/jjshcc/archive/2010/06/30/324924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jjshcc/comments/commentRss/324924.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jjshcc/services/trackbacks/324924.html</trackback:ping><description><![CDATA[<p>我们知道Struts2?x)将Action中的属性存攑ֈValueStack对象中,在通过Action转发的页面中Q我们可以通过Struts2的标{?lt;s:property/>来输些|但是q样得到的值却仅限于输出显C,不能q行q一步的操作Q那么我们应该怎样得到ValueStack中的值又能对它进行其他操作呢Q?/p> <p>首先Q我们需要了解Struts2是将Action中的属性全部封装在一个叫做struts.valueStack的请求属性中Q然后我们就可以通过下面的代码来获取q些gQ?/p> <p> </p> <pre style="display: none" class="html" name="code"><%@ page import="com.opensymphony.xwork2.util.*"%> <% ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack"); List someThing= (List)vs.findValue("someThing"); %> </pre> <p> <span style="white-space: pre">someThing是Action中属性值的名称?/span></p> <img src ="http://www.aygfsteel.com/jjshcc/aggbug/324924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-06-30 21:18 <a href="http://www.aygfsteel.com/jjshcc/archive/2010/06/30/324924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的属性驱动与模型驱动的区?/title><link>http://www.aygfsteel.com/jjshcc/archive/2010/06/17/323750.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Thu, 17 Jun 2010 13:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/jjshcc/archive/2010/06/17/323750.html</guid><wfw:comment>http://www.aygfsteel.com/jjshcc/comments/323750.html</wfw:comment><comments>http://www.aygfsteel.com/jjshcc/archive/2010/06/17/323750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jjshcc/comments/commentRss/323750.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jjshcc/services/trackbacks/323750.html</trackback:ping><description><![CDATA[<p>1.Struts2的属性驱? </p> <p>Struts2的属性驱动指的是在action中JSP面的每一个form中的name都对应在action中有一个属性与之对应。看下面代码片段: </p> <p> </p> <p><br /> <form action="register.do" name="RegisterForm" method="post"> </p> <p>            Username:<input type="text" name="uname"><br><br />             Password:<input type="password" name="upass"><br><br />             Confirm: <input type="password" name="rpass"><br><br />             <input type="submit" value="Submit"> </p> <p></form> </p> <p> </p> <p><br /> q是一个最基本的用h册的表单,它有三个数据要提? uname、upass、rpassQ那么对应的Action也要有三个属性(其实是三个属性的setterQ,看register.do实际的Action定义c:(x) </p> <p> </p> <p><br /> package org.abu.csdn.action.user;</p> <p>import com.opensymphony.xwork2.ActionSupport;</p> <p>/**<br />  * Struts2属性驱动演C用的Action<br />  * @author 阿布<br />  *<br />  */ <br /> public class RegisterAction extends ActionSupport {</p> <p>    private String uname;<br />     private String upass;<br />     private String rpass;</p> <p>    public String getUname() {<br />         return uname;<br />     }</p> <p>    public void setUname(String uname) {<br />         this.uname = uname;<br />     }</p> <p>    public String getUpass() {<br />         return upass;<br />     }</p> <p>    public void setUpass(String upass) {<br />         this.upass = upass;<br />     }</p> <p>    public String getRpass() {<br />         return rpass;<br />     }</p> <p>    public void setRpass(String rpass) {<br />         this.rpass = rpass;<br />     }<br />     <br />     @Override<br />     public String execute() throws Exception {        <br />         return ActionSupport.SUCCESS;<br />     }</p> <p>}</p> <p> </p> <p> </p> <p>你会(x)看到RegisterAction中的三个属性和RegisterForm表单中的name属性名字一模一P没错Q这是Struts2的属性驱动,当表单提交到RegisterAction后,Struts2会(x)自动根据表单的name属性调用Action中相应的属性setterQ去自动赋倹{?</p> <p> </p> <p><br /> 2.Struts2的模型驱?</p> <p>Struts2的模型驱动其实和Struts1.x中的ActionForm有点cMQ在Struts1.x中每一个Action都必L一个ActionForm与之对应Q而Struts2.0中,每一个Action同样需要提供一个POJO对象Q用来封装表单属性,看代码:(x) </p> <p> </p> <p><br /> <form action="register.do" name="RegisterForm" method="post"> </p> <p>            Username:<input type="text" name="uname"><br><br />             Password:<input type="password" name="upass"><br><br />             Confirm: <input type="password" name="rpass"><br><br />             <input type="submit" value="Submit"> </p> <p></form> </p> <p> </p> <p><br /> q段表单的代码和上面的一模一P׃赘述了。接下来看POJO的代码,其实是普通的Java BeanQ?</p> <p> </p> <p><br /> package org.abu.csdn.action.user;</p> <p>import com.opensymphony.xwork2.ActionSupport;</p> <p>/**<br />  * Struts2属性驱动演C用的Java Bean<br />  * @author 阿布<br />  *<br />  */ <br /> public class User {</p> <p>    private String uname;<br />     private String upass;<br />     private String rpass;</p> <p>    public String getUname() {<br />         return uname;<br />     }</p> <p>    public void setUname(String uname) {<br />         this.uname = uname;<br />     }</p> <p>    public String getUpass() {<br />         return upass;<br />     }</p> <p>    public void setUpass(String upass) {<br />         this.upass = upass;<br />     }</p> <p>    public String getRpass() {<br />         return rpass;<br />     }</p> <p>    public void setRpass(String rpass) {<br />         this.rpass = rpass;<br />     }<br />    <br /> } </p> <p> </p> <p><br /> 对不P也是和属性驱动中的例子一P很简单,因ؓ(f)演示的都是同一个例子,只是Ҏ(gu)不同而已Q但是接下来׃一样了Q看RegisterAction代码Q?</p> <p> </p> <p><br /> package org.abu.csdn.action.user;</p> <p>import org.abu.csdn.dto.User;</p> <p>import com.opensymphony.xwork2.ActionSupport;<br /> import com.opensymphony.xwork2.ModelDriven;</p> <p>/**<br />  * Struts2模型驱动演示用的Action<br />  *  <br />  * @author 阿布<br />  *<br />  */ <br /> public class RegisterAction extends ActionSupport implements ModelDriven<User> {</p> <p>    private User user;<br />     <br />     public User getUser() {<br />         return user;<br />     }</p> <p>    public void setUser(User user) {<br />         this.user = user;<br />     }</p> <p>    @Override<br />     public String execute() throws Exception {        <br />         return ActionSupport.SUCCESS;<br />     }</p> <p>    // 模型驱动必须实现的方法,也是ModelDriven接口中唯一的方?<br />     public User getModel() {<br />         <br />         return user;<br />     }</p> <p>}</p> <p> </p> <p> </p> <p>看到没有Q和属性驱动的Action有很大的区别Q下面一一列DQ?</p> <p>Q?Q模型驱动的Action必须实现ModelDriven接口Q而且要提供相应的泛型Q这里当然就是具体用的Java Bean了?</p> <p>Q?Q实现ModelDriven的getModelҎ(gu)Q其实就是简单的q回泛型的一个对象?</p> <p>Q?Q在Action提供一个泛型的U有对象Q这里就是定义一个User的user对象Qƈ提供相应的getter与setter?</p> <p>好了Q上面的三g事做完之后,Action׃(x)去自动调用User的setter表单中的name属性的DlUser中的属性。而Action的后l处理的Jsp面后者是Servlet可以用user对象了?</p> <p> </p> <p> </p> <p> </p> <p>3.到底是用属性驱动和是模型驱动呢Q?</p> <p> </p> <p> </p> <p>q个问题困扰了很多Struts2的初学者,我这里提供一些徏议:(x) </p> <p>Q?Q请你统一整个pȝ中的Action使用的驱动模型,卌么都是用属性驱动,要么都是用模型驱动?</p> <p>Q?Q如果你的DB中的持久层的对象与表单中的属性都是一一对应的话Q那么就使用模型驱动吧,毕竟看v来代码要整洁得多?</p> <p>Q?Q如果表单的属性不是一一对应的话Q那么就应该使用属性驱动,否则Q你的系l就必须提供两个BeanQ一个对应表单提交的数据Q另一个用与持久层?</p> <p> </p> <p><br /> 看上面的例子Q其实密码确认rpass是不需要放到DB中去的,而仅仅是用于校验密码的,不是吗?那么如果使用模型驱动的话Q就存在q个问题了,而用属性驱动的话又有些J琐Q现在我们就来调整一个看我的解决Ҏ(gu)Q?</p> <p> </p> <p><br /> 4.完整的例?</p> <p>Q?Q表单提交的JSP面index.jsp </p> <p><%@ page language="java" contentType="text/html; charset=UTF-8"<br />     pageEncoding="UTF-8"%><br /> <%@ taglib uri="/struts-tags" prefix="s"%><br /> <%<br />     String path = request.getContextPath();<br />     String basePath = request.getScheme() + "://"<br />             + request.getServerName() + ":" + request.getServerPort()<br />             + path + "/";<br /> %></p> <p><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><br /> <html><br />     <head><br />         <base href="<%=basePath%>"><br />         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br />         <title>CSDN首页</title><br />     </head><br />     <body><br />         <s:a href="userManager/userRegister.jsp">用户注册</s:a><br />         <br />         <form action="register.do" name="SampleForm" method="post"><br />             Username:<input type="text" name="uname"><br><br />             Password:<input type="password" name="upass"><br><br />             Confirm: <input type="password" name="rpass"><br><br />             <input type="submit" value="Submit"> <br />         </form><br />     </body><br /> </html> </p> <p> </p> <p><br /> (2)User的定?</p> <p> </p> <p><br /> package org.abu.csdn.action.user;</p> <p>import com.opensymphony.xwork2.ActionSupport;</p> <p>/**<br />  * Struts2属性驱动演C用的Java Bean<br />  * @author 阿布<br />  *<br />  */ <br /> public class User {</p> <p>    private String uname;<br />     private String upass;  </p> <p>    public String getUname() {<br />         return uname;<br />     }</p> <p>    public void setUname(String uname) {<br />         this.uname = uname;<br />     }</p> <p>    public String getUpass() {<br />         return upass;<br />     }</p> <p>    public void setUpass(String upass) {<br />         this.upass = upass;<br />     }   <br />    <br /> } </p> <p> </p> <p><br /> Q?QRegisterAction的定?</p> <p> </p> <p><br /> package org.abu.csdn.action.user;</p> <p>import com.opensymphony.xwork2.ActionSupport;</p> <p>/**<br />  * Struts2属性驱动演C用的Action<br />  * @author 阿布<br />  *<br />  */ <br /> public class RegisterAction extends ActionSupport {</p> <p> </p> <p> </p> <p>    // 用来lspring注入Q及(qing)属性拷?</p> <p><br />     private User user;</p> <p> </p> <p> </p> <p>    private String uname;<br />     private String upass;<br />     private String rpass;</p> <p>    public String getUname() {<br />         return uname;<br />     }</p> <p>    public void setUname(String uname) {<br />         this.uname = uname;<br />     }</p> <p>    public String getUpass() {<br />         return upass;<br />     }</p> <p>    public void setUpass(String upass) {<br />         this.upass = upass;<br />     }</p> <p>    public String getRpass() {<br />         return rpass;<br />     }</p> <p>    public void setRpass(String rpass) {<br />         this.rpass = rpass;<br />     }<br />     <br />     @Override<br />     public String execute() throws Exception { </p> <p>        // 调用Ҏ(gu)属性copy到user中去Q便于后l的serviceҎ(gu) </p> <p><br />         copyAttribute(); </p> <p>        // TODOQ编写自quser业务代码 <br />         return ActionSupport.SUCCESS;<br />     } </p> <p> </p> <p><br />     /**<br />      * 注意q是一个action全局的校?br />      */ <br />     @Override<br />     public void validate() {<br />         // q行密码的校?<br />         if (!(upass.trim()).equals((rpass.trim()))) {<br />             // 注意q里addFieldError的fieldName参数必须用引号引h,<br />             // 不能q样使用addFieldError(rpass,"XXXXXX"),而必LaddFieldError("rpass","XXXXX") <br />             this.addFieldError("rpass", this<br />                     .getText("csdn.action.user.register.validate.verify"));<br />         }<br />     }</p> <p> </p> <p> </p> <p> </p> <p><br />     /**<br />      * 表单属性中需要持久化的属性拷贝到user中去<br />      * @author 阿布<br />      *<br />     */ <br />     private void copyAttributes () { </p> <p>            user.setUname(uname); </p> <p>            user.setUpass(upass);</p> <p><br />     } </p> <p><br /> } </p> <p> </p> <p> </p> <p> </p> <p>Q?QStruts.xml配置 </p> <p><?xml version="1.0" encoding="UTF-8" ?><br /> <!DOCTYPE struts PUBLIC<br />     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"<br />     "http://struts.apache.org/dtds/struts-2.1.dtd"><br /> <struts><br />     <package name="root" extends="struts-default" namespace="/userManager"><br />         <action name="userRegister" class="org.abu.csdn.action.user.RegisterAction"><br />             <result name="success">/index.jsp</result><br />             <result name="input">/userManager/userRegister.jsp</result><br />         </action>                <br />     </package><br /> </struts></p> <p> </p> <p> </p> <p> </p> <p>本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/csuliky/archive/2009/05/30/4226917.aspx</p> <img src ="http://www.aygfsteel.com/jjshcc/aggbug/323750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-06-17 21:05 <a href="http://www.aygfsteel.com/jjshcc/archive/2010/06/17/323750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">ʳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°Ͷ</a>| <a href="http://" target="_blank">Ҷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˱</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Ӫɽ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">齭</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ຣʡ</a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͼ</a>| <a href="http://" target="_blank">԰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">״</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">书</a>| <a href="http://" target="_blank">Ĭ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>