首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jQuery中使用参数调用JSF托管bean方法

在jQuery中使用参数调用JSF托管bean方法
EN

Stack Overflow用户
提问于 2013-03-28 03:51:00
回答 2查看 7.9K关注 0票数 4

我正在使用JSF来构建一个站点。我已经在我的主页上添加了jQuery Gritter (Growl)通知。可以在$.gritter.add函数的before_close:中调用托管bean方法吗?

我想使用的代码如下:

代码语言:javascript
运行
复制
<h:body>
    <c:forEach items="#{notificationBean.growlNotificationList}" var="p">
        <script>
        /* <![CDATA[ */
        $.gritter.add({
            // (string | mandatory) the heading of the notification
            title: 'Notification',
            // (string | mandatory) the text inside the notification
            text: 'Comment on your staus',
            // (bool | optional) if you want it to fade out on its own or just sit there
            sticky: true, 
            // (int | optional) the time you want it to be alive for before fading out (milliseconds)
            time: 8000,
            // (string | optional) the class name you want to apply directly to the notification for custom styling
            class_name: 'gritter-light',
            // (function | optional) function called before it closes
            before_close: function(e, manual_close){
                '#{notificationBean.set0ToGrowlToShow(p.notificationID)}'
            }
        });
        /* ]]> */
        </script>
    </c:forEach>
</h:body>
EN

Stack Overflow用户

回答已采纳

发布于 2013-03-28 04:06:03

您当前的尝试只是将给定的EL表达式解释为值表达式,并在生成嵌入了JS代码的HTML输出时立即打印其结果。就像你在使用<h:outputText>一样。这确实是行不通的。

然而,功能需求是可以理解的。标准的JSF API没有为此提供现成的解决方案。如果您想坚持使用标准JSF,最好的办法是创建一个具有隐藏命令链接的隐藏表单,您可以使用JavaScript触发该链接。

基本上,

代码语言:javascript
运行
复制
<h:form id="form" style="display:none">
    <h:inputHidden id="id" value="#{notificationBean.notificationID}" />
    <h:commandLink id="command" action="#{notificationBean.set0ToGrowlToShow}">
        <f:ajax execute="@form" />
    </h:commandLink>
</h:form>

使用

代码语言:javascript
运行
复制
$("[id='form:id']").val(#{p.notificationID});    
$("[id='form:command']").click();

然而,这是相当笨拙的。考虑寻找第三方JSF组件,甚至是实用程序库来满足需求。JSF实用程序库OmniFaces具有用于此目的的组件。另请参阅其showcase page

代码语言:javascript
运行
复制
<h:form>
    <o:commandScript name="set0ToGrowlToShow" action="#{notificationBean.set0ToGrowlToShow}" />
</h:form>

使用

代码语言:javascript
运行
复制
set0ToGrowlToShow(#{p.notificationID});

(请注意,这被设置为HTTP请求参数,而不是操作方法参数)

JSF组件库PrimeFaces具有与<o:commandScript>非常相似的。另请参阅其showcase page。更重要的是,PrimeFaces有一个现成的组件,它的功能与您的jQuery插件基本相同!另请参阅其showcase page。你可以这样做,而不是整个jQuery的事情:

代码语言:javascript
运行
复制
<p:growl globalOnly="true" autoUpdate="true" />

并通过以下方式向其提供消息

代码语言:javascript
运行
复制
facesContext.addMessage(null, message);

另请参阅:

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15668132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档