JSF与DWR的整合 --- 如何让JSF的ManagedBean来进行Reverse AJAX调用
①、在正常配置DWR(包括reverse ajax配置)及JSF之后在web.xml中做如下定义:
@H_301_18@
<
filter
>
@H_301_18@
<
filter-name
>
@H_301_18@DwrFacesFilter
</
filter-name
>
@H_301_18@
<
filter-class
>
@H_301_18@
org.directwebremoting.faces.FacesExtensionFilter
</
filter-class
>
@H_301_18@
</
filter
>
@H_301_18@
<
filter-mapping
>
@H_301_18@
<
filter-name
>
@H_301_18@DwrFacesFilter
</
filter-name
>
@H_301_18@
<
url-pattern
>
@H_301_18@/dwr/*
</
url-pattern
>
@H_301_18@
</
filter-mapping
>
②、在jsp页面中,引入DWR的一些js脚本,并编写你自己的javascript,例如:
@H_301_18@
@H_301_18@<
@H_301_18@scripttype
@H_301_18@=
@H_301_18@'
@H_301_18@text/javascript
@H_301_18@'
@H_301_18@src
@H_301_18@=
@H_301_18@'
@H_301_18@/DWRTest/dwr/engine.js
@H_301_18@'
@H_301_18@>
@H_301_18@
@H_301_18@</
@H_301_18@script
@H_301_18@>
@H_301_18@
@H_301_18@<
@H_301_18@scripttype
@H_301_18@=
@H_301_18@'
@H_301_18@text/javascript
@H_301_18@'
@H_301_18@src
@H_301_18@=
@H_301_18@'
@H_301_18@/DWRTest/dwr/util.js
@H_301_18@'
@H_301_18@>
@H_301_18@
@H_301_18@</
@H_301_18@script
@H_301_18@>
@H_301_18@
@H_301_18@<
@H_301_18@script
@H_301_18@>
@H_301_18@
function
@H_301_18@alertTest(msg)
...
@H_301_18@{
alert(msg);
}
@H_301_18@
@H_301_18@</
@H_301_18@script
@H_301_18@>
在<body>标签中增加一个reverse ajax的显式设置:<body onload="dwr.engine.setActiveReverseAjax(true);">
③、ManagedBean中,写一个actionListener方法
@H_301_18@FacesContextfacesContext
@H_301_18@=
@H_301_18@FacesContext.getCurrentInstance();
ServletContextservletContext
@H_301_18@=
@H_301_18@(ServletContext)facesContext.getExternalContext().getContext();
ServerContextsctx
@H_301_18@=
@H_301_18@ServerContextFactory.get(servletContext);
Collectionsessions
@H_301_18@=
@H_301_18@sctx.getScriptSessionsByPage(
@H_301_18@"
@H_301_18@/DWRTest/test.faces
@H_301_18@"
@H_301_18@);
Utilpages
@H_301_18@=
@H_301_18@
new
@H_301_18@Util(sessions);
pages.addFunctionCall(
@H_301_18@"
@H_301_18@alertTest
@H_301_18@"
@H_301_18@,
@H_301_18@"
@H_301_18@hellodwr
@H_301_18@"
@H_301_18@);
注意,不能采用DWR在普通jsp中获取ServletContext的方法,因为在那种方式中,URL的解析是通过DWRServlet解析的,而在JSF中是由FacesServlet来解析的,所以使用WebContextFactory.get().getServletContext() 会得到NullPointerException.
原文链接:https://www.f2er.com/ajax/166380.html①、在正常配置DWR(包括reverse ajax配置)及JSF之后在web.xml中做如下定义:
@H_301_18@
<
filter
>
@H_301_18@
< filter-name > @H_301_18@DwrFacesFilter </ filter-name > @H_301_18@
< filter-class > @H_301_18@
org.directwebremoting.faces.FacesExtensionFilter
</ filter-class > @H_301_18@
</ filter > @H_301_18@
< filter-mapping > @H_301_18@
< filter-name > @H_301_18@DwrFacesFilter </ filter-name > @H_301_18@
< url-pattern > @H_301_18@/dwr/* </ url-pattern > @H_301_18@
</ filter-mapping >
< filter-name > @H_301_18@DwrFacesFilter </ filter-name > @H_301_18@
< filter-class > @H_301_18@
org.directwebremoting.faces.FacesExtensionFilter
</ filter-class > @H_301_18@
</ filter > @H_301_18@
< filter-mapping > @H_301_18@
< filter-name > @H_301_18@DwrFacesFilter </ filter-name > @H_301_18@
< url-pattern > @H_301_18@/dwr/* </ url-pattern > @H_301_18@
</ filter-mapping >
②、在jsp页面中,引入DWR的一些js脚本,并编写你自己的javascript,例如:
@H_301_18@
@H_301_18@<
@H_301_18@scripttype
@H_301_18@=
@H_301_18@'
@H_301_18@text/javascript
@H_301_18@'
@H_301_18@src
@H_301_18@=
@H_301_18@'
@H_301_18@/DWRTest/dwr/engine.js
@H_301_18@'
@H_301_18@>
@H_301_18@
@H_301_18@</
@H_301_18@script
@H_301_18@>
@H_301_18@
@H_301_18@< @H_301_18@scripttype @H_301_18@= @H_301_18@' @H_301_18@text/javascript @H_301_18@' @H_301_18@src @H_301_18@= @H_301_18@' @H_301_18@/DWRTest/dwr/util.js @H_301_18@' @H_301_18@> @H_301_18@ @H_301_18@</ @H_301_18@script @H_301_18@> @H_301_18@
@H_301_18@< @H_301_18@script @H_301_18@> @H_301_18@
function @H_301_18@alertTest(msg) ... @H_301_18@{
alert(msg);
} @H_301_18@
@H_301_18@</ @H_301_18@script @H_301_18@>
@H_301_18@< @H_301_18@scripttype @H_301_18@= @H_301_18@' @H_301_18@text/javascript @H_301_18@' @H_301_18@src @H_301_18@= @H_301_18@' @H_301_18@/DWRTest/dwr/util.js @H_301_18@' @H_301_18@> @H_301_18@ @H_301_18@</ @H_301_18@script @H_301_18@> @H_301_18@
@H_301_18@< @H_301_18@script @H_301_18@> @H_301_18@
function @H_301_18@alertTest(msg) ... @H_301_18@{
alert(msg);
} @H_301_18@
@H_301_18@</ @H_301_18@script @H_301_18@>
在<body>标签中增加一个reverse ajax的显式设置:<body onload="dwr.engine.setActiveReverseAjax(true);">
③、ManagedBean中,写一个actionListener方法
@H_301_18@FacesContextfacesContext
@H_301_18@=
@H_301_18@FacesContext.getCurrentInstance();
ServletContextservletContext @H_301_18@= @H_301_18@(ServletContext)facesContext.getExternalContext().getContext();
ServerContextsctx @H_301_18@= @H_301_18@ServerContextFactory.get(servletContext);
Collectionsessions @H_301_18@= @H_301_18@sctx.getScriptSessionsByPage( @H_301_18@" @H_301_18@/DWRTest/test.faces @H_301_18@" @H_301_18@);
Utilpages @H_301_18@= @H_301_18@ new @H_301_18@Util(sessions);
pages.addFunctionCall( @H_301_18@" @H_301_18@alertTest @H_301_18@" @H_301_18@, @H_301_18@" @H_301_18@hellodwr @H_301_18@" @H_301_18@);
ServletContextservletContext @H_301_18@= @H_301_18@(ServletContext)facesContext.getExternalContext().getContext();
ServerContextsctx @H_301_18@= @H_301_18@ServerContextFactory.get(servletContext);
Collectionsessions @H_301_18@= @H_301_18@sctx.getScriptSessionsByPage( @H_301_18@" @H_301_18@/DWRTest/test.faces @H_301_18@" @H_301_18@);
Utilpages @H_301_18@= @H_301_18@ new @H_301_18@Util(sessions);
pages.addFunctionCall( @H_301_18@" @H_301_18@alertTest @H_301_18@" @H_301_18@, @H_301_18@" @H_301_18@hellodwr @H_301_18@" @H_301_18@);
注意,不能采用DWR在普通jsp中获取ServletContext的方法,因为在那种方式中,URL的解析是通过DWRServlet解析的,而在JSF中是由FacesServlet来解析的,所以使用WebContextFactory.get().getServletContext() 会得到NullPointerException.