我们可以用Struts2中的参数调用方法吗?

问题描述:

我已将sturts2应用程序配置为使用验证xml进行操作。我也有fieldexpression工作。我们可以用Struts2中的参数调用方法吗?

是否可以从表达式中的操作中调用方法。 如:

<field name="myField"> 
    <field-validator type="fieldexpression"> 
    <param name="expression"><![CDATA[ 
     @[email protected](keyString, userResponce) 
    ]]></param> 
    <message>My credit limit should be MORE than my girlfriend's</message> 
    </field-validator> 
</field> 

这里是我的实际测试代码,简单fieldexpression作品,但函数调用一个不(见tbox1)。 我不确定@ class @方法路径是否正常,但不起作用 因为我已经添加了登录功能,但没有出现,所以我认为验证程序无法访问功能。

此外,这是可能的,也就是说,它是允许的还是我太雄心勃勃。

感谢

PS我已经纠正了该消息,我不会交易我的女朋友;-) * ** *的validation.xml

<!DOCTYPE validators PUBLIC 
      "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
      "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 
<validators> 
    <field name="tbox1"> 
     <field-validator type="fieldexpression"> 
      <param name="expression"><![CDATA[@[email protected]()]]></param> 
      <message>function call message here</message> 
     </field-validator> 
    <field-validator type="fieldexpression"> 
     <param name="expression"><![CDATA[@[email protected](tbox1, user.username)]]></param> 
     <message>function call message here</message> 
    </field-validator> 
    </field> 
    <field name="tbox2"> 
     <field-validator type="stringlength"> 
      <param name="maxLength">5</param> 
      <message>length messssage here</message> 
     </field-validator> 
    </field> 
    <field name="user.username"> 
     <field-validator type="fieldexpression"> 
      <param name="expression"><![CDATA[(!(tbox2 == "aa" && user.username.equals("")))]]></param> 
      <message>tbox2 eq aa and username is empty messssage2 here</message> 
     </field-validator> 

    </field> 

</validators> 

** * ** * * Java类

package uk.co.nhbc.userRegistration.action; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import uk.co.nhbc.common.action.BaseAction; 
import uk.co.nhbc.userRegistration.model.Users; 

public class Test2Action extends BaseAction { 
    private String tbox1; 
    private String tbox2; 
    private Users user; 
    private static final Log log = LogFactory.getLog(Test2Action.class); 

    public String execute() { 
     return SUCCESS; 
    } 

    public String getTbox2() { 
     return tbox2; 
    } 

    public void setTbox2(String tbox2) { 
     this.tbox2 = tbox2; 
    } 

    public String getTbox1() { 
     return tbox1; 
    } 

    public void setTbox1(String tbox1) { 
     this.tbox1 = tbox1; 
    } 

    public Users getUser() { 
     log.debug("get user called"); 
     return user; 
    } 

    public void setUser(Users user) { 
     log.debug("set user called"); 
     this.user = user; 
    } 

    public boolean isCaptchaOk(String challenge, String response) { 
     //dummy test function 
     log.debug("captcha function called"); 
     if (response.equals("true")) 
      return true; 
     return false; 

    } 
    public String getString(){ 
     log.debug("getString function called"); 
     return "hello"; 

    } 

} 

** * ** * ** *和jsp页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<s:form name="formtest" action="Test2Action"> 
<s:actionerror/> 
<s:fielderror></s:fielderror> 
<s:textfield name="tbox1" label="box1"></s:textfield> 
<s:textfield name="tbox2" label="box1"></s:textfield> 
<s:textfield name="user.username" label="boxuser"></s:textfield> 
<s:submit></s:submit> 
</s:form> 
</body> 
</html> 
+1

你尝试了吗?(我敢肯定你的意思是“比我的女朋友的更多”,除非你交易人)。 –

+0

hy戴夫,是的,我试过了,我已经在 – Rushi

+0

之上添加了我的实际(原始)测试代码文件。 。它有效吗? –

看到我更新的工作验证文件。对于fielddexpression中的字段tbox1,我直接指的是这个方法,因为它是我的动作,它将在VS上。 tbox1和user.username是jsp页面上的项目(也存在于动作中)

我试着用静态方法进行实验,但没有奏效,(现在没时间调查了)。 希望这有助于
并感谢戴夫的输入。

** *更新验证XML

<!DOCTYPE validators PUBLIC 
      "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
      "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> 
<validators> 
    <field name="tbox1"> 
     <field-validator type="fieldexpression"> 
      <param name="expression"><![CDATA[isCaptchaOk(tbox1, user.username)]]></param> 
      <message>function call message here</message> 
     </field-validator> 
    </field> 
    <field name="tbox2"> 
     <field-validator type="fieldexpression"> 
      <param name="expression"><![CDATA[(@[email protected](tbox2))]]></param> 
      <message>func okk function call message here</message> 
     </field-validator> 
    </field> 
    <field name="user.username"> 
     <field-validator type="fieldexpression"> 
      <param name="expression"><![CDATA[(!(tbox2 == "aa" && user.username.equals("")))]]></param> 
      <message>tbox2 eq aa and username is empty messssage2 here</message> 
     </field-validator> 

    </field> 

</validators> 



** *更新java类

package uk.co.nhbc.userRegistration.action; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import uk.co.nhbc.common.action.BaseAction; 
import uk.co.nhbc.userRegistration.model.Users; 

public class Test2Action extends BaseAction { 
    private String tbox1; 
    private String tbox2; 
    private Users user; 
    private static final Log log = LogFactory.getLog(Test2Action.class); 

    public String execute() { 
     return SUCCESS; 
    } 

    public String getTbox2() { 
     return tbox2; 
    } 

    public void setTbox2(String tbox2) { 
     this.tbox2 = tbox2; 
    } 

    public String getTbox1() { 
     return tbox1; 
    } 

    public void setTbox1(String tbox1) { 
     this.tbox1 = tbox1; 
    } 

    public Users getUser() { 
     log.debug("get user called"); 
     return user; 
    } 

    public void setUser(Users user) { 
     log.debug("set user called"); 
     this.user = user; 
    } 

    public boolean isCaptchaOk(String challenge, String response) { 
     //dummy test function 
     log.debug("captcha function called"); 
     log.debug("captcha function called"+challenge+response); 
     if (response.equals("true")) 
      return true; 
     return false; 

    } 
    public String getString(){ 
     log.debug("getString function called"); 
     return "hello"; 

    } 

    public static boolean isFuncOk (String response){ 
     log.debug("isFuncOk function called"+response); 
     if (response.equals("true")) 
      return true; 
     return false; 

    } 

} 

为了调用表达一个静态方法,它必须是OGNL,您应该通过将下面的常量添加到struts.xml文件来启用struts.ognl.allowStaticMethodAccess:

<常量名= “struts.ognl.allowStaticMethodAccess” 值= “真”/>