2013-02-06 20 views
0

我添加一些代码使用jQuery .append()JSF comandLink添加使用jQuery .append()不工作

$('#div').append('<div id="windiv">'+ 
      '<h:commandLink id="cmdbtn">'+ 
      '<div id="reducebtndiv" class="btn"></div>'+ 
     '<f:ajax event="click" execute="@form"'+ 
       'listener="#{screenShotBean.takeScreenshot}" ></f:ajax>'+ 
        '</h:commandLink>'); 

但commandLink不起作用。 所以问题是,有没有办法让它工作?我也很欣赏知道这个理论。 :)

回答

2

commandLink不起作用,因为您正在使用由客户端(浏览器)运行的JavaScript添加它。

JSF视图(由JSF组件构成)需要在服务器端进行处理,当它们被渲染时,它们会输出适合您的浏览器处理的HTML元素。 JSF组件不是标准的HTML元素,因此它们不被浏览器识别。

很难猜测你想要实现什么,但是如果你想动态地添加一些JSF组件,那么你需要触发一个针对服务器的AJAX请求,并重新渲染视图中的那些组件需要插入(当然,如HTML)。

+0

JSF为commandLink和f:ajax生成的代码如下:

,我添加了mojarra.js和jsf.js,它们被它们请求并将这些代码直接放在.xhml文件中,但它不会既不工作也不工作。 – Bardelman

+0

听起来更像是一种解决方案,即使它工作我也不会尝试,如果Mojarra实现在将来某一天改变,代码将停止工作。我们为什么不从头开始?你想要达到什么目的?我相信你可以用JSF的方式做到这一点 –

+0

我不明白为什么它看起来像一个黑客,因为它是一个开源框架!我想要的是添加js的代码,可以击中一个托管bean方法(AjaxBehaviorEvent侦听器处理程序),我不会用JSF JavaScript API做,因为我不能设置“侦听器”,它也有用jquery .append()添加代码的可能性,但无论如何,我知道我可以通过其他方式包含一些代码。谢谢你,无论如何:) – Bardelman