在javascript中从window.open()调用时未调用操作方法
我试图在struts 2中打开一个新窗口并调用一个操作 问题是jsp会打开,但在我按下刷新或从新jsp开始之前,不会调用该操作 我希望执行该操作,然后重定向到对应的jsp,但现在它重定向到对应于第一个映射结果的jsp 来自javascript的操作调用:在javascript中从window.open()调用时未调用操作方法,javascript,jsp,struts2,Javascript,Jsp,Struts2,我试图在struts 2中打开一个新窗口并调用一个操作 问题是jsp会打开,但在我按下刷新或从新jsp开始之前,不会调用该操作 我希望执行该操作,然后重定向到对应的jsp,但现在它重定向到对应于第一个映射结果的jsp 来自javascript的操作调用: function displayGraph(graphName) { alert("displayGraph"); var url = 'drawCMGraph?data=' + encodeURIC
function displayGraph(graphName)
{ alert("displayGraph");
var url = 'drawCMGraph?data=' + encodeURIComponent(graphName);
alert(url);
window.open(url, "_blank",
"directories=no, status=no,width=550, height=200,top=0,left=0");
}
struts.xml中的动作映射
<action name="drawCMGraph" class="com.casealerts.action.HomeAction" method="Drawgraph">
<result name="success">/casealerts/test.jsp</result>
<result name="error">/casealerts/Error.jsp</result>
</action>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Comp</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener> <!--This listener handles caching of data when the server context is loaded.-->
<listener-class>CompListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/casealerts/Login.jsp</welcome-file>
</welcome-file-list>
</web-app>
/casealerts/test.jsp
/casealerts/Error.jsp
web.xml
<action name="drawCMGraph" class="com.casealerts.action.HomeAction" method="Drawgraph">
<result name="success">/casealerts/test.jsp</result>
<result name="error">/casealerts/Error.jsp</result>
</action>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Comp</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener> <!--This listener handles caching of data when the server context is loaded.-->
<listener-class>CompListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/casealerts/Login.jsp</welcome-file>
</welcome-file-list>
</web-app>
公司
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/*
监听器
/casealerts/Login.jsp
行动
package com.casealerts.action;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.casealerts.businessdelegate.HomePageCMDelegate;
import com.casealerts.formbean.HomeForm;
public class HomeAction extends ActionSupport implements ModelDriven<HomeForm>,Preparable,ServletRequestAware
{
/**
*
*/
private static final long serialVersionUID = 272240572969090988L;
Logger log=new Log4jHelper().getLogger(getClass());
HomeDelegate hpd=null;
private HttpServletRequest request;
HomeForm form=null;
private HttpSession session=null;
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
}
@Override
public void prepare() throws Exception {
// TODO Auto-generated method stub
form=new HomeForm();
}
@Override
public HomeForm getModel() {
// TODO Auto-generated method stub
return form;
}
public String Drawgraph()
{
session=request.getSession(true);
hpd=new HomeDelegate(form,session);
String result=hpd.getGraphData("alert", 1);
return result;
}
}
package com.casearters.action;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Vector;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpSession;
导入org.apache.log4j.Logger;
导入org.apache.struts2.interceptor.ServletRequestAware;
导入com.opensymphony.xwork2.ActionSupport;
导入com.opensymphony.xwork2.ModelDriven;
导入com.opensymphony.xwork2.Preparable;
导入com.casealerts.businessdelegate.HomePageCMDelegate;
导入com.casealerts.formbean.HomeForm;
公共类HomeAction扩展了ActionSupport实现了模型驱动、可准备、ServletRequestAware
{
/**
*
*/
私有静态最终长serialVersionUID=27224057296909088L;
Logger log=new Log4jHelper().getLogger(getClass());
HomeDelegate hpd=null;
私有HttpServletRequest;
homeformform=null;
私有HttpSession会话=null;
@凌驾
public void setServletRequest(HttpServletRequest请求){
//TODO自动生成的方法存根
this.request=请求;
}
@凌驾
public void prepare()引发异常{
//TODO自动生成的方法存根
form=新的HomeForm();
}
@凌驾
公共HomeForm getModel(){
//TODO自动生成的方法存根
申报表;
}
公共字符串Drawgraph()
{
session=request.getSession(true);
hpd=新的常驻代表(表格、会议);
字符串结果=hpd.getGraphData(“警报”,1);
返回结果;
}
}
试着把它改成
var url = 'drawCMGraph.action?data=' + encodeURIComponent(graphName);
alert(url);
我找到了解决这个问题的办法。似乎我们需要为action类中URL中发送的数据创建一个变量、getter和setter。
这对IE很好,但在eclipse浏览器中不起作用发布操作和web.xml配置。注意:该方法应以小写字母“D”开头……在javascript中使用
标记。@Aleksandr M请您详细说明。服务器控制台出现任何异常…@panky1986服务器控制台无异常