您的位置:首页 > 编程语言 > Java开发

Spring架构增强MultiActionController(3)

2008-10-10 12:04 316 查看
我们可以在MultiActionController中定义一个PropertiesMethodNameResolver类型的成员变量“propertiesMethodNameResoler”。和定义一个Properties类型的成员变量“urlMethodmappings”在MultiActionController的bean进行配置的时候把urlMethodmappings的值作为propertiesMethodNameResoler的mapping的值。然后再调用MultiActionController的setMethodNameResolver()方法,把propertiesMethodNameResoler设置为MultiActionController的methodNameResolver的属性值。要做到这一些还应该实现InitializingBean接口。

public class MultiMethodController extends MultiActionController implements
InitializingBean ...{
private Properties urlMethodmappings;
public void afterPropertiesSet() throws Exception ...{
if (urlMethodmappings != null && !urlMethodmappings.isEmpty()) ...{
PropertiesMethodNameResolver propertiesMethodNameResolver
= new PropertiesMethodNameResolver();
propertiesMethodNameResolver.setMappings(urlMethodmappings);
this.setMethodNameResolver(propertiesMethodNameResolver);
if (this.logger.isInfoEnabled()) ...{
this.logger.info("binding success...... ");
}
} else ...{
logger.info("no 'urlMethodmappings' set on MultiMethodController");
}
}
/**//**
* @return Returns the urlMethodmappings.
*/
public Properties getUrlMethodmappings() ...{
return urlMethodmappings;
}
/**//**
* @param urlMethodmappings
* The urlMethodmappings to set.
*/
public void setUrlMethodmappings(Properties urlMethodmappings) ...{
this.urlMethodmappings = urlMethodmappings;
}
}
在afterPropertiesSet中,

PropertiesMethodNameResolver propertiesMethodNameResolver 
= new PropertiesMethodNameResolver();
创建一个默认的PropertiesMethodNameResolver的实例

propertiesMethodNameResolver.setMappings(urlMethodmappings);
把urlMethodmappings作为propertiesMethodNameResolver的mapping属性值

this.setMethodNameResolver(propertiesMethodNameResolver);
调用父类方法,把propertiesMethodNameResolver注入MethodNameResolver属性中。

注意,在这里我命名为MultiMethodController是为了与MultiActionController区别。

通过这样的代码,简化了原本复杂的配置。

4.2通过一个commandName属性,可以让用户自由决定绑定对象的名称

MultiActionController的getCommandName如下:

public static final String DEFAULT_COMMAND_NAME = "command";
protected String getCommandName(Object command) ...{
return DEFAULT_COMMAND_NAME;
}
MultiActionController并没有一个setCommandName的方法,所以我们需要一个setCommandName的方法,然后重写getCommandName(Object command)方法

private String commandName =DEFAULT_COMMAND_NAME;
public String getCommandName() ...{
return commandName;
}
public void setCommandName(String commandName) ...{
this.commandName = commandName;
}
protected String getCommandName(Object object) ...{
return this.getCommandName();
}
如果没有设置commandName属性,默认值为“command”,通过setCommandName方法就可以自由的去决定comamnd对象的名称了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: