如何使用jsf渲染器类中的字符串值初始化JavaScript变量
我正在尝试加载一个d3图形,其中包含基于我在上一页中选择的设备的信息,即基于数据的动态加载。下面给出了我当前的配置,尽管它不起作用,因为一旦加载图形,它就会将d3.event作为null异常提供给我 my faces-config.xml的渲染工具包为:如何使用jsf渲染器类中的字符串值初始化JavaScript变量,javascript,jsf,jsf-2,Javascript,Jsf,Jsf 2,我正在尝试加载一个d3图形,其中包含基于我在上一页中选择的设备的信息,即基于数据的动态加载。下面给出了我当前的配置,尽管它不起作用,因为一旦加载图形,它就会将d3.event作为null异常提供给我 my faces-config.xml的渲染工具包为: <render-kit> <renderer> <display-name>ABCTopologyView</display-name>
<render-kit>
<renderer>
<display-name>ABCTopologyView</display-name>
<component-family>javax.faces.ABCTopologyView</component-family>
<renderer-type>com.jsf.component.ABCView</renderer-type>
<renderer-class>com.jsf.component.ABCViewRenderer</renderer-class>
</renderer>
</render-kit>
java:方法encodeEnd将数据从对象解析为JSON对象并调用javascript函数
public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
throws IOException {
JsonElement dataElement = parseData(object);
JsonObject options = dataElement.getAsJsonObject();
JavascriptContext.addJavascriptCall(facesContext,
String.format("topology.CreateHtml(%s);", options.toString()));
}
您应该在
encodeEnd
方法中将JavaScript元素写入响应编写器:
ResponseWriter writer = context.getResponseWriter();
writer.startElement("script", this);
writer.writeText("alert('foo');", null);
writer.endElement("script");
用JavaScript语句替换
alert('foo')
。JavascriptContext.addJavascriptCall
不是简单的JSF。(最有可能是icefaces)我认为不应该从组件中使用它,而是从Bean中使用它。我应该给出我的javascript文件的路径吗?如果你想加载javascript文件,请使用@ResourceDependency
添加它。例如,尽管我能够在D3JavaScript中获取json对象,但d3.event返回null,这在所有JSF组件框架(如PrimeFaces、IceFaces)的源代码中都可以看到etc@user2617666也许您的JavaScript代码只能在加载文档时运行?
public void encodeEnd(FacesContext facesContext, UIComponent uiComponent)
throws IOException {
JsonElement dataElement = parseData(object);
JsonObject options = dataElement.getAsJsonObject();
JavascriptContext.addJavascriptCall(facesContext,
String.format("topology.CreateHtml(%s);", options.toString()));
}
ResponseWriter writer = context.getResponseWriter();
writer.startElement("script", this);
writer.writeText("alert('foo');", null);
writer.endElement("script");