ParameterNameAware 是XWork中新增的一个接口,是由Bob Lee (
crazybob@google.com)提供的,主要的用途是限制Action仅接收一定规则的参数,用来防止无意义的参数或者破坏?不过我想我暂时用不到这个接口,不过还是介绍一下如何使用吧.
首先我们写一个Action,实现ParameterNameAware接口,这个接口只有一个方法,就是public boolean acceptableParameterName(String name).
我们的Action如下:
package com.jscud.ww2test.parametername;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.interceptor.ParameterNameAware;
/**
* @author scud http://www.jscud.com
*/
public class ParameterNameTestAction extends ActionSupport implements ParameterNameAware
{
private String name1;
private String name2;
private String name3;
public String execute()
{
return SUCCESS;
}
/**
* 当前参数名是否允许.
* @param name 参数名
* @return 是否允许
*/
public boolean acceptableParameterName(String name)
{
if (name.equals("name1") || name.equals("name2"))
{
return true;
}
return false;
}
public String getName1()
{
return name1;
}
public void setName1(String name1)
{
this.name1 = name1;
}
public String getName2()
{
return name2;
}
public void setName2(String name2)
{
this.name2 = name2;
}
public String getName3()
{
return name3;
}
public void setName3(String name3)
{
this.name3 = name3;
}
}
可以看到,这个Action实现了ParameterNameAware接口,并且设置只接收"name1"和"name2"两个参数,而我们在action有三个用来保存用户输入值的对象:name1,name2和name3.
我们的action定义如下:
<package name="parameternametest" extends="webwork-default" namespace="/parametername">
<action name="index" class="com.jscud.ww2test.parametername.ParameterNameTestAction">
<result name="success" type="dispatcher">
<param name="location">/parametername/index.jsp</param>
</result>
</action>
</package>
不需要定义任何额外的拦截器,这个接口是在ParametersInterceptor被检测的.
目标页面如下:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>Test ParamaterName</title>
</head>
<body>
<ww:form name="test" action="index" method="post" namespace="/parametername" >
<ww:textfield name="name1" label="Name1" /><br>
<ww:textfield name="name2" label="Name2" /><br>
<ww:textfield name="name3" label="Name3" /><br>
<ww:submit value="Submit" />
</ww:form>
<br/>
Show Message:
<br/>
Name1 is:<ww:property value="name1" /><br/>
Name2 is:<ww:property value="name2" /><br/>
Name3 is:<ww:property value="name3" /><br/>
</body>
</html>
运行程序,我们可以发现,name3的值没有得到设置,我们在页面中也自然得不到name3的值了
首先我们写一个Action,实现ParameterNameAware接口,这个接口只有一个方法,就是public boolean acceptableParameterName(String name).
我们的Action如下:
package com.jscud.ww2test.parametername;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.interceptor.ParameterNameAware;
/**
* @author scud http://www.jscud.com
*/
public class ParameterNameTestAction extends ActionSupport implements ParameterNameAware
{
private String name1;
private String name2;
private String name3;
public String execute()
{
return SUCCESS;
}
/**
* 当前参数名是否允许.
* @param name 参数名
* @return 是否允许
*/
public boolean acceptableParameterName(String name)
{
if (name.equals("name1") || name.equals("name2"))
{
return true;
}
return false;
}
public String getName1()
{
return name1;
}
public void setName1(String name1)
{
this.name1 = name1;
}
public String getName2()
{
return name2;
}
public void setName2(String name2)
{
this.name2 = name2;
}
public String getName3()
{
return name3;
}
public void setName3(String name3)
{
this.name3 = name3;
}
}
可以看到,这个Action实现了ParameterNameAware接口,并且设置只接收"name1"和"name2"两个参数,而我们在action有三个用来保存用户输入值的对象:name1,name2和name3.
我们的action定义如下:
<package name="parameternametest" extends="webwork-default" namespace="/parametername">
<action name="index" class="com.jscud.ww2test.parametername.ParameterNameTestAction">
<result name="success" type="dispatcher">
<param name="location">/parametername/index.jsp</param>
</result>
</action>
</package>
不需要定义任何额外的拦截器,这个接口是在ParametersInterceptor被检测的.
目标页面如下:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>Test ParamaterName</title>
</head>
<body>
<ww:form name="test" action="index" method="post" namespace="/parametername" >
<ww:textfield name="name1" label="Name1" /><br>
<ww:textfield name="name2" label="Name2" /><br>
<ww:textfield name="name3" label="Name3" /><br>
<ww:submit value="Submit" />
</ww:form>
<br/>
Show Message:
<br/>
Name1 is:<ww:property value="name1" /><br/>
Name2 is:<ww:property value="name2" /><br/>
Name3 is:<ww:property value="name3" /><br/>
</body>
</html>
运行程序,我们可以发现,name3的值没有得到设置,我们在页面中也自然得不到name3的值了