我正在使用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将读取此值以显示消息。
您是否知道如何实现?
答案 0 :(得分:0)
使用“局部”变量在像JSF这样的框架中执行此操作非常矛盾。我认为您应该在commandButtons中使用ProcessInfo.processInfo.processName = "New Name"
属性来指定在Bean中执行代码后必须更新页面的哪个组件,这样就不需要重新加载整个页面和更新组件带有新信息。
请查看this问题以获取详细说明。