这周的任务,
第一个任务是120多字段的列表呈现,导入和导出,以及一个模糊搜索的实现,
第二个任务是在首页,用提供的接口,显示数量和代办连接,不需要做分页,因为没有超过十行。。
1.将工作表里面数据转换成对应对象列表返回
List<CommonImportMessage> messages = new ArrayList<CommonImportMessage>();
List<TclAnalysis> dataList = new ArrayList<TclAnalysis>();
int firstRowindex = sheet.getFirstRowNum();// 获取第一个实际行的下标
int lastRowindex = sheet.getLastRowNum();// 获取最后一个实际行的下标
int firstColindex = 0;
int lastColindex = 0;
String content = "";
org.apache.poi.ss.usermodel.Row currentRow = null;
TclAnalysis newanalysismain = null;
// 因为行数第一行是空白的,要获取有内容的行,需要进行加一操作,双循环
for (int startindex = firstRowindex + 1; startindex <= lastRowindex; startindex++) {
newanalysismain = new TclAnalysis();
currentRow = sheet.getRow(startindex);// 快速获取当前的行数的对象
firstColindex = currentRow.getFirstCellNum();
// 获取在某行第一个单元格的下标
lastColindex = currentRow.getLastCellNum();
for (int colindex = firstColindex; colindex < lastColindex; colindex++) {
org.apache.poi.ss.usermodel.Cell currentCell = currentRow.getCell(colindex);
content = getCellValue(currentCell, true);
if (colindex == 0) {
java.lang.reflect.Method method = newanalysismain.getClass().getDeclaredMethod("setName",
String.class);
method.invoke(newanalysismain, content.trim());
} else if (colindex == 1) {
} else if (colindex == 120) {
} else {
java.lang.reflect.Method method = newanalysismain.getClass().getMethod("setName" + colindex, String.class);
method.invoke(newanalysismain, content.trim());
}
}
dataList.add(newanalysismain);
}
messages = SaveData(dataList);
return messages;
其中用到了反射去给方法设值。。
2.在首页,用提供的接口,显示数量和代办连接
接口是对方提供的,调用接口就可以获取到数量和链接。但是这里在一开始的时候,我们应该会先去想到是否需要分页这个问题,在数据展示的时候,是否分页是必须要考虑的。(先获取配置项,在写一个StringBuffer)去把后面的接上,这种写法,我觉得很好,可以学习。
TclConfig tclConfig = tclConfigService.getTclConfigByKey("FSSC_TODO_URL");
String urlStr = tclConfig.getFdStr03() + fsscTodoUrl;
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("userName", userId);
jsonObject2.put("language", "zh_CN");
jsonObject2.put("pageIndex", pageNo);
jsonObject2.put("pageSize", pageSize);
urlStr = urlStr.replace("#DATA#", jsonObject2.toString());
url = new URL(urlStr);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));
String line;
StringBuffer buffer = new StringBuffer();
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
这是得到值,然后我再理一理跳转的过程。先页面获取客户端的请求,由Struts来控制前后端之间的值的传递和页面之间的选择,先调用ACTION方法,去返回一个MAP,在根据MAP的值,去获得要跳转到哪一个页面。是如何根据MAP的值去获取的呢??后面自己来回答
<action path="/sys/notify/sys_notify_todo/sysNotifyTodoFinancial"
type="com.landray.kmss.sys.notify.actions.SysNotifyTodoFinancialAction"
parameter="method"
input="edit"
unknown="false"
validate="true"
scope="request">
对于它的参数,解释如下:
//这里的method方法可以被取代的,是由下面的来取代,从而跳转
//validate="true" 是指的要校验吧 要经过校验方法才会继续往下执行的 不会直接进去execute
//在Action映射配置中,Scope属性可以取值为:request或session。Scope属性表示:Struts框架在将 ActionForm对象(与目标Action匹配的ActionForm)传送到Action之前,会将ActionForm对象保存的位置,指的是作用域的范围。。
// input指定formbean的数据是由哪个页面提供的。 说明:提供此属性的目的在于formbean校验失败时,程序方便跳回formbean的输入页面,通过struts1错误信息标签,显示校验失败信息。
//如果action把该属性设置为true,则它可以处理客户机发出的所有无效的.do请求,默认值为false。
<forward name="fssc-todo" path="/sys/notify/sys_notify_financial/sysNotifyTodo_financial.jsp" />
</action>
下面是对Struts的一些介绍,因为自己不是很熟悉
没有struts之前,使用servlet,最常用的是 doGet,doPost,service方法,如果有些经验的程序员会合理的使用这三个方法:如在用户发出get的请求时,将用户请求在doGet方法中处理,用户发出post请求时,将用户的请求用doPost请求处理,必要时加上service方法去处理那些在一个servlet中必须执行的请求,用户的请求大体也就这三类,但是如果细分,一个“编辑”,“删除”,“查看”等操作都是doGet的范围,当然也可以都写到serice方法中或 doPost中处理,这样为了区分这些请求,我们通常都要在程序中加入一个判断的参数,如:operate,然后在程序中判断 if operate.equals("update")....,if operate.equals("del")....,if operate.equals("view")....等,实际上这只是个简单的逻辑,如果业务更加复杂,你可能写更多的类时operate的参数,这样就造成程序中有若干if..else if...else if ..,即便你有非常好的编码规范,整齐的缩进,这个程序也相当难维护;而用到struts时,你又可能把这些参数都写到execute方法中;那么最好的方法还是将这些逻辑分开处理,如果执行“编辑”操作的时候调用“编辑”对应的方法,执行“删除”的时候调用“删除”对应的方法...将是比较理想的结果,为了实现这个应用要求,struts引入许多类型的工具类,如:MappingDispathAction,LookDispachAction,DispatchAction,以满足不同要求的需要,这样你在struts-config.xml文件的action元素中增加 parameter属性即可实现这个功能。
最后就是前端的展示了,前端要用的就是标签和一个模块技术。将这个功能加到那个模块中,在把模块加到首页里面去。从而完成,前端的总结,后面会补上。。