在struts 2应用程序中考虑以下示例。这是一个显示网格的页面,用户可以将SAME网格导出为PDF。
我们开发了一个包含两个动作的类,一个动作将网格作为JSON返回,另一个动作将SAME网格导出为PDF。
代码结构如下:
已定义了两个不同的动作地图/ShowGrid
和/ExportGrid
@Action (name="ShowGrid") // Result will be set to JSON
@validation ( @Required (..... // Validation Rules for fromDate toDate etc
public String showGrid(){
gird = serviceFacade.getGrid(fromDate,toDate);
return SUCCESS;
}
@Action (name="ExportGrid" ) //Result will be set as stream
@validation ( @Required ..... // Validation Rules for fromDate toDate etc
public String exportGrid(){
grid = serviceFacade.getGrid(fromDate,toDate);
inputStream = convertGridToStream(grid); // By using jasper report or other tools
return SUCCESS;
}
正如您所看到的,上述方法有许多共同的结构,
有什么方法可以避免这种情况吗?!
答案 0 :(得分:3)
您可以使用@Actions
注释将多个操作映射到同一方法。在actions方法中,您可以从操作上下文中获取名称并定义逻辑。
@Actions({
@Action ("ExportGrid"), //Result will be set as stream
@Action ("ShowGrid") // Result will be set to JSON
})
@validation ( @Required ..... // Validation Rules for fromDate toDate etc
public String doGrid(){
grid = serviceFacade.getGrid(fromDate,toDate);
if (ActionContext.getContext().getName().equals("ExportGrid")
inputStream = convertGridToStream(grid); // By using jasper report or other tools
return SUCCESS;
}