JSF中的局部(前端)变量

时间:2018-12-13 14:18:47

标签: javascript java jsf richfaces

我正在使用JSF,并且遇到以下问题:

我有2个命令按钮:

<h:commandButton id="btn1" value="Button 1" action="#{bean.action1()}"
   onclick="#{rich:component('confirmation')}.show();" /> 

<h:commandButton id="btn2" value="Button 2" action="#{bean.action2()}"
   onclick="#{rich:component('confirmation')}.show();" /> 

因此,当单击它们时,将显示一个弹出窗口(带有id =“ confirmation”)。

这是弹出窗口:

<rich:popupPanel id="confirmation" header="Note" modal="true"
            width="525" height="180" resizable="false" headerClass="rf-p-hdr"
            autosized="false">

        <a4j:queue ignoreDupResponses="true" requestDelay="500" />

        <f:facet name="controls">
            <h:panelGroup>
                <a4j:commandButton
                    image="#{resource['default:img/close_button.png']}"
                    styleClass="close_button" action="#{bean.cancel()}"
                    render="@all"
                    oncomplete="#{rich:component('confirmation')}.hide(); return false;"
                    status="ajaxProgress" />
            </h:panelGroup>
        </f:facet>

        <s:div styleClass="help_embedded"
            style="margin-bottom: 20px; margin-top: 20px;">
            <h:outputText value="Here I want to display a message that tells the user which button was pressed." />
        </s:div>

        <s:div style="margin-left: 82px;">

            <s:decorate template="/layout/field.xhtml">

                <a4j:commandButton value="#{messages['allPages.button.save']}"
                    action="#{bean.save()}" execute="@this"
                    oncomplete="#{rich:component('confirmation')}.hide(); return false;"
                    render="@all"
                    status="ajaxProgress" />

                <a4j:commandButton value="#{messages['allPages.button.cancel']}"
                    styleClass="cancel" action="#{bean.cancel()}"
                    execute="@this"
                    oncomplete="#{rich:component('confirmation')}.hide(); return false;"
                    render="@all"
                    status="ajaxProgress" />

            </s:decorate>

        </s:div>


    </rich:popupPanel>

我的问题是:如果您在弹出窗口中查看h:outputText-我希望它根据按下的命令按钮向用户显示一条消息 (btn1或btn2)。 例如,如果用户按下 btn1 ,则弹出消息将为-“您刚刚按下了按钮1。确定要执行此操作吗?” 。而且,如果用户按下按钮2 ,则消息将显示为:“您刚刚按下了按钮2。确定要执行此操作吗?”

我已经尝试过每次按下按钮然后重新渲染弹出窗口时都更新backing bean的值,但是好像popup标签仅在页面加载时生成一次,而重新渲染则什么也不做。

我还想要一种解决方案,其中 UI的所有动态更改仅发生在前端-而不影响服务器来重新生成页面-因此按按钮1可以修改javascript前端变量,弹出窗口中的h:outputText将读取此值以显示消息。

您是否知道如何实现?

1 个答案:

答案 0 :(得分:0)

使用“局部”变量在像JSF这样的框架中执行此操作非常矛盾。我认为您应该在commandButtons中使用ProcessInfo.processInfo.processName = "New Name" 属性来指定在Bean中执行代码后必须更新页面的哪个组件,这样就不需要重新加载整个页面和更新组件带有新信息。

请查看this问题以获取详细说明。