在项目中一个模块的jsp中看到这样一段代码,不是很理解里面${flag }的意思,然后为什么可以通过flag来进行判断跳到不同的页面。
functiondoReturn(){
var flag = '${flag }';
if(flag=='task'){
location.href="${ctx}/jsp/snakerflow/active_task_list.jsp";
}elseif(flag=='history'){
location.href="${ctx}/jsp/snakerflow/history_task_list.jsp";
}elseif(flag=='order'){
location.href="${ctx}/jsp/snakerflow/order.jsp";
}
}
此处${flag }是EL表达式,它的意思是取出某一范围中名称为flag的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、
Application范围查找。
此处是从request同取出,如何取出呢?
在业务记录的列表里,双击一行数据会触发doDisplay()方法,
/**
* 查看流程图
* @param rowIndex
*/
functiondoDisplay(rowIndex){
var rowData =$(datagridId).datagrid("getRows")[rowIndex];
location.href=appPath+'/snakerflow/process_display.do?processId='+rowData.processId+'&orderId='+rowData.orderId+'&flag=history';
}
该方法会发送一个请求将flag已参数的形式传到process_display.do这个action里,在看看这个action里面是啥?
publicString display() {
String processId =request.getParameter("processId");
String orderId =request.getParameter("orderId");
request.setAttribute("processId",processId);
HistoryOrder order =snakeProcessService.getHistOrder(orderId);
request.setAttribute("order",order);
List<HistoryTask> tasks =snakeProcessService.getHistoryTasks(orderId);
request.setAttribute("tasks",tasks);
request.setAttribute("flag",request.getParameter("flag"));
return "processView";
}
标红的这一段,获取请求中flag的值并将它存放在“flag”中,那么也就解释了一开始的问题。
其实这样通过El表达式获取参数值的例子在中核项目中还运用的很多!
再比如说,为什么项目内的每个js文件都可以通过getProjectId()这个方法来获取当前项目ID呢?
在common_script.jsp中定义了该方法
function getProjectId() {
return"${projectId}"; //EL表达式
}
在common_head.jsp中定义了${projectId}的值如何取到
pageContext.setAttribute("projectId", session.getAttribute("projectId"));
但是也要通过获取session中的projectId才能将它存到"projectId"中啊。
那么就要留意从项目外点击一个项目框,进入项目内的这个动作,这个click事件在index.js这个文件中定义,代码如下
p.css("cursor", "pointer").click(
function() {
window.location.href = appPath+ "/" + item.projectId+"/sub_index.jhtml";
});
)
标红的那段url也是在项目中找了半天才找到,原来项目中有一个叫做urlrewrite的工具,将这个url进行了改写
这个url背重新定位到proSurvey()这个action
<rule>
<from>^/([0-9]+)/sub_index.jhtml</from>
<to>/system/project_proSurvey.do?projectId=$1</to>
</rule>
proSurvey(){
request.getSession().setAttribute("projectId",getCurrentProjectId());//通过getCurrentProjectId()方法获取projectId
}
原来session中的projectId是这样被存进去的;