Ajax JSF2和自定义组件-如何从Javascript代码调用操作?
我已经修改了一个饼图JS对象来与JSF一起使用;为了做到这一点,我创建了一个自定义组件,它在页面上输出适当的标记和JS调用,从而正确地呈现图形。为了便于参考,在我为JS部分所遵循的教程中 下一步是侦听切片上的单击,并从支持bean调用操作。图表的JS对象已经包含了一个占位符函数,可以监听这样的点击,所以我相信它的JS部分是好的。然而,JSF方面仍然让我感到厌烦;我已经阅读了JavaEE教程、JimDriscoll的博客文章以及互联网上的所有文章,但仍然无法理解它 那么,有谁能给我举个小例子,说明我如何将JS函数调用绑定到JSF中的事件侦听器,以便我的支持bean能够很好地了解用户单击了哪个切片索引 这将接近于:Ajax JSF2和自定义组件-如何从Javascript代码调用操作?,ajax,jakarta-ee,jsf-2,Ajax,Jakarta Ee,Jsf 2,我已经修改了一个饼图JS对象来与JSF一起使用;为了做到这一点,我创建了一个自定义组件,它在页面上输出适当的标记和JS调用,从而正确地呈现图形。为了便于参考,在我为JS部分所遵循的教程中 下一步是侦听切片上的单击,并从支持bean调用操作。图表的JS对象已经包含了一个占位符函数,可以监听这样的点击,所以我相信它的JS部分是好的。然而,JSF方面仍然让我感到厌烦;我已经阅读了JavaEE教程、JimDriscoll的博客文章以及互联网上的所有文章,但仍然无法理解它 那么,有谁能给我举个小例子,说明
function myChartObject() {
function onSliceClick() {
// This will somehow trigger JSF ajax event listener with slice data
}
}
class MyCustomChart extends UIComponentBase implements ClientBehaviorHolder {
// Is the decode() method the place to bind JS calls to JSF actions?
}
我发现最接近我的问题是这样的。但是,我希望在我自己的组件中使用标准JSFAPI提供这种支持。可能接近的东西
提前谢谢大家 看起来您希望能够在java编译代码中编码ajax风格的行为,同时将其与J2ee堆栈集成 想到的框架是JBOSS的Seam
这里有一个很好的教程:看起来您希望能够在java编译代码中编码ajax风格的行为,同时将其与J2ee堆栈集成 想到的框架是JBOSS的Seam
这里有一个很好的教程:执行AJAX调用的JSF Javascript API本身是标准化的(资源库“javax.faces”,资源名“JSF.js”),但是在您自己的基于Java的自定义组件中添加完整的AJAX支持有点复杂 我能想到的最快的方法是跟随您引用的Jim Driscoll的博客,通过将您自己的基于Java的自定义组件包装到复合组件中,重新使用
标记提供的现有AJAX机制
在Jim的示例中,我猜他的示例第22行中的以下代码是您应该在onSliceClick
函数中呈现的代码:
String click = behaviors.get("click").get(0).getScript(behaviorContext);
然后看起来有点像这样:
<ui:component
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:cu="http://javaserverfaces.dev.java.net/demo/custom-taglib"
>
<cc:interface shortDescription="Some Description">
<cc:attribute name="render" required="false" />
<cc:attribute name="clickAction" method-signature="java.lang.Object action" required="true" shortDescription="The click action method" />
</cc:interface>
<cc:implementation>
<cu:custom id="customId">
<f:ajax render="#{cc.attrs.render}" listener="#{cc.attrs.clickAction}"/>
</cu:custom>
</cc:implementation>
</ui:component>
请注意,我还没有对此进行测试,但这是总体思路。当然,也可以直接在Java代码中完成所有这些工作,但这肯定需要更多的工作。执行AJAX调用的JSF Javascript API本身是标准化的(资源库“javax.faces”,资源名“JSF.js”),但在您自己的基于Java的自定义组件中添加完整的AJAX支持有点复杂 我能想到的最快的方法是跟随您引用的Jim Driscoll的博客,通过将您自己的基于Java的自定义组件包装到复合组件中,重新使用
标记提供的现有AJAX机制
在Jim的示例中,我猜他的示例第22行中的以下代码是您应该在onSliceClick
函数中呈现的代码:
String click = behaviors.get("click").get(0).getScript(behaviorContext);
然后看起来有点像这样:
<ui:component
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:cu="http://javaserverfaces.dev.java.net/demo/custom-taglib"
>
<cc:interface shortDescription="Some Description">
<cc:attribute name="render" required="false" />
<cc:attribute name="clickAction" method-signature="java.lang.Object action" required="true" shortDescription="The click action method" />
</cc:interface>
<cc:implementation>
<cu:custom id="customId">
<f:ajax render="#{cc.attrs.render}" listener="#{cc.attrs.clickAction}"/>
</cu:custom>
</cc:implementation>
</ui:component>
请注意,我还没有对此进行测试,但这是总体思路。当然,也可以直接在Java代码中完成所有工作,但这肯定需要更多的工作。我知道Seam,但它不是本项目的选项。同样,这个问题与JSF自定义组件开发更相关,它首先应该是框架无关的。但是谢谢你的时间:)我知道Seam,但它不是这个项目的一个选项。同样,这个问题与JSF自定义组件开发更相关,它首先应该是框架无关的。但是谢谢你的时间:)我想没有办法了,只能试着简化一下组件本身。如果您查看JS图表,对切片单击的调用与画布组件相关联——作者使用几何图形来确定单击是否在切片上,然后调用触发事件的JS函数。将任何东西绑定到Java自定义组件中的这个JS行为都是很困难的。我想没有办法解决这个问题,只能尝试稍微简化组件本身。如果您查看JS图表,对切片单击的调用与画布组件相关联——作者使用几何图形来确定单击是否在切片上,然后调用触发事件的JS函数。将任何东西绑定到Java自定义组件中的这个JS行为都是很困难的。。