JSF - 单击<a> element</a>时调用bean方法

时间:2012-07-20 02:53:57

标签: java javascript jsf fancybox

所以我有一个锚元素,它的href属性是从bean动态设置的。我正在使用锚,因为它与fancybox javascript交互。我需要做的是在单击锚点时调用bean中的方法,以便href再次更新。上面有一个文本框也绑定到bean。需要做的是从文本框中获取文本,并将其解析为锚点href的查询字符串。

我正在努力找出实现这一目标的最佳方式(如果可能的话)。我是否可以使用javascript(或Ajax)来调用updateHref()方法?

textbox和anchor元素(需要更新的是ModelBean.ending):

<h:inputTextarea value="#{ModelBean.tweet}" class="textarea.hs-input #{ModelBean.tweetClass}" style="width:200px;" >
                        <f:facet name="label">
                            Tweet
                        </f:facet>
                    </h:inputTextarea>

                </td>
            </tr>
            <tr>
                <td>
                    <h:commandButton value="Analyze Tweet" class="hs-button orange" action="#{ModelBean.tweetAnalysis()}" />
                </td>
                <td>
                    <a href="https://app.hubspot.com/social/#{ModelBean.hubID}/publishing/compose_bookmarklet?body=#{ModelBean.ending}" class="hs-button primary fancybox-iframe" data-fancybox-type="iframe"  >
                        Tweet it!
                    </a>
                </td>
            </tr>

以下是需要调用的java:

ending = URLEncoder.encode(tweet, "UTF-8");
ending = ending.replaceAll("\\+", "%20");

如果您认为代码的任何其他部分有用,请告诉我们!并提前感谢任何建议!

1 个答案:

答案 0 :(得分:0)

如果你使用JSF 2.0,f:ajax标签可以解决你的问题。这是f:ajax标签的示例用法,

    <h:commandLink value="#{..}">
        <f:ajax execute="name" render="output" />
    </h:commandLink>
    <h:inputTextarea id="output" value="#{..}" />

执行 =“名称” - 表示ID为“name”的表单组件将被发送到服务器进行处理。对于多个组件,只需将它们之间用空格分开,例如execute =“name anotherId anotherxxId”。在这种情况下,它将提交文本框值。

render =“output” - 在Ajax请求之后,它将刷新id为“output”的组件。在这种情况下,在Ajax请求完成后,它将刷新h:inputTextarea组件。