通过JSF中的JavaScript从bean获取更新值
Posted
技术标签:
【中文标题】通过JSF中的JavaScript从bean获取更新值【英文标题】:Get updated value from bean through JavaScript in JSF 【发布时间】:2015-07-01 00:44:02 【问题描述】:我在 itemComp.xhtml 中有一个上下文菜单,如果我单击上下文菜单中的任何项目,将调用 itemDisplay.refreshItems
并在完成此操作时调用 javascript 函数 showPanel()
itemComp.xhtml
<rich:contextMenu disableDefaultMenu="true" event="oncontextmenu" submitMode="ajax">
<rich:menuItem disabled="true" style="color:black; font-weight:bold;" value="Items"/>
<rich:menuSeparator/>
<c:forEach items="#itemDisplay.componentTypeMap.keySet" var="itemValue">
<rich:menuItem value="#itemValue"
rendered="#(itemValue == 'Bags Report') or
(itemValue == 'Chairs Report') or
(itemValue == 'Tables Report')"
action="#itemDisplay.refreshItems"
oncomplete="showPanel( '#itemValue','#item.id')">
</rich:menuItem>
</c:forEach>
</rich:contextMenu>
在 itemDisplayBean.java 的 refreshItems()
中,我将所有变量设置为 true。
itemDisplayBean.java
私有布尔availableBags = false;
public boolean getAvailableBags()
return this.availableBags;
public void setAvailableBags(boolean availableBags)
this.availableBags = availableBags;
private boolean availableBags = false;
public boolean getAvailableBags()
return this.availableBags;
public void setAvailableBags(boolean availableBags)
this.availableBags = availableBags;
private boolean availableChairs = false;
public boolean getAvailableChairs()
return this.availableChairs;
public void setAvailableChairs(boolean availableChairs)
this.availableChairs = availableChairs;
private boolean availableTables = false;
public boolean getAvailableTables()
return this.availableTables;
public void setAvailableTables(boolean availableTables)
this.availableTables = availableTables;
public String refreshItems()
setAvailableBags(true);
setAvailableChairs(true);
setAvailableTables(true);
在 itemDisplay.xhtml 中,我有 JavaScript 函数 showPanel()
如下。
function showPanel(item, itemId)
if (item == 'Bags Report')
if (#itemDisplay.availableBags)
Richfaces.showModalPanel('bags');
else
alert('No bags Found');
else if (item == 'Chairs Report')
if (#itemDisplay.availableChairs)
Richfaces.showModalPanel('chairs');
else
alert('No Chairs Found');
else if (item == 'Tables Report')
if (#itemDisplay.availableTables)
Richfaces.showModalPanel('tables');
else
alert('No Tables Found');
这里的问题是——在 JavaScript 函数中,我没有得到更新的支持 bean 值,因此可用的包(if( #itemDisplay.availableBags ))
是false
(即使它在支持 bean 中设置为 true)和面板未显示。如果我刷新页面,那么我将从支持 bean 获取更新的值(if( #itemDisplay.availableBags )
为 true 并显示面板。任何人都可以帮助我为什么我只能通过刷新页面来获取更新的值。
【问题讨论】:
我想不通,请您详细说明一下 除非您再次渲染rich:menuItem
,否则不会使用新值评估 EL 表达式(那种 #
事物)。这就是您没有更新它们的原因。
我在 a4j:Panel 中添加了一个 id,其中嵌入了这个 rich:menuItem 并尝试重新渲染它
正如所指出的,EL 表达式在页面呈现并成为静态文本时进行评估。
您可以使用@data
,例如:
<rich:menuItem data="#itemDisplay.availableBags"
oncomplete="showPanel('#itemValue', event.data)" … >
event.data
将包含属性的当前值(您甚至可以将其指向一个对象)。
编辑:在 RichFaces 3.x 中,JS 参数只是 data
【讨论】:
event.data 在 showPanel javascriptfunction 中未定义,我用 alert 打印了它event.data
应该始终存在。您使用的是哪个版本的 RichFaces?
下次最好提一下,否则我希望您使用最新的。 :)以上是关于通过JSF中的JavaScript从bean获取更新值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JSF 中的另一个 bean 获取 managedbean 属性
JSF 2.0 AJAX:使用 jsf.ajax.request(或其他方式)从 javascript 调用 bean 方法
JSF 1.1-不刷新页面调用backing bean的动作方法(通过ajax/javascript)