buffer.append("</th>\n");
}
// 判断是否需要显示操作栏
PageFunction pf = new PageFunction();
if (editable)
pf.setFunctionPositionRelatedValue(
new Long(Globals.FUNCTION_LIST_EDIT));
else
pf.setFunctionPositionRelatedValue(new Long(Globals.FUNCTION_LIST));
// 得到所有在list显示的功能
ArrayList pfList = sdp.query(pf);
// 过滤掉不符合的,符合的包括function_class为空的,或者function_class和 class_name 一致的。
// 不能加上function_class为查询条件,因为可能会过滤掉function_class为空的。
ArrayList effectList = new ArrayList();
for (int i = 0; i < pfList.size(); i++) {
pf = (PageFunction) pfList.get(i);
if (pf.getFunctionClass() == null
|| className.equals(pf.getFunctionClass()))
effectList.add(pf);
}
if (effectList.size() != 0)
buffer.append("<th>操作</th>");
buffer.append("</tr>\n");
if (request.getAttribute(Globals.PAGE) != null) {
Page page = (Page) request.getAttribute(Globals.PAGE);
ArrayList dataList = page.getPageData();
int dataSize = dataList.size();
for (int i = 0; i < dataSize; i++) {
Object object = dataList.get(i);
String primaryKey = (String) BeanUtil.getPubStaticFieldValue(
object.getClass(), Const.PRIMARY_KEY);
Object primaryKeyValue = BeanUtil.getFieldValue(object,
primaryKey);
buffer.append("<tr id = \"tr"+primaryKeyValue+"\">\n");
buffer.append("<td><input type=\"checkbox\" name=\"check\" id=\"check"
+ i + "\" value=\"" + primaryKeyValue
+ "\"/> </td>\n");
//根据用户是需要什么样的显示页面来确定是否需要编辑
if (editable) {
buffer.append(getDisplayEdit(object, displayProperties,
null, i, false));
} else {
buffer.append(getDisplayList(object, displayProperties, i));
}
// 输出每列的功能按钮
if (effectList.size() != 0) {
buffer.append("<td>");
// 下面将主键值加入到functionName当中(见表Page_Function),需要functionName带有括号,例如Data.apply('cn.edu.pku.dr.requirement.elicitation.action.ProjectAction'),
// 这里是要在括号内加入主键名以及主键值作为参数,例如加入后可能变为apply('cn.edu.pku.dr.requirement.elicitation.action.ProjectAction','projectId',1);
for (int k = 0; k < effectList.size(); k++) {
pf = (PageFunction) effectList.get(k);
// 如果功能的出现需要条件,则要进行判断
Integer result = null;
// 这里0,1,-1的含义见FunctionCondition
if (pf.getFunctionCondition() != null) {
result = (Integer) BeanUtil.invokeStaticMethod(
FunctionCondition.class, pf.getFunctionCondition(),
new Object[] {object, userId });
// 如果值不为真,则继续。
if (result.intValue() == -1)
continue;
}
String functionName = pf.getFunctionName();
//这里i代表行号,可能会被用到,也可能没有用到。看具体的方法
functionName = functionName.trim().substring(0,
functionName.length() - 1)
+ ",'" + primaryKey + "',"
+ primaryKeyValue + "," + i +")";
if (result == null || result.intValue() == 1)
buffer.append("<input type=\"button\" value=\""
+ pf.getFunctionDisplayValue()
+ "\" onclick=\"" + functionName + "\"/>");
else
buffer
.append("<input type=\"button\" disabled value=\""
+ pf.getFunctionDisplayValue()
+ "\" onclick=\""
+ functionName
+ "\"/>");
}