我在itemComp.xhtml中有一个上下文菜单,如果我点击上下文菜单中的任何项目,将调用动作itemDisplay.refreshItems
并完成此操作JavaScript函数showPanel()
将被称为通过JSF中的JavaScript从bean获取更新值
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()
,我设置的所有变量为真。
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的值,因此availableBags(if(#{itemDisplay.availableBags}))
是false
(即使它被设置为true,支持豆),面板如果我刷新页面,那么我会从后台bean(if(#{itemDisplay.availableBags})
)获得更新后的值,并显示面板。任何人都可以帮助我为什么只通过刷新页面来获取更新的值。
我无法弄清楚,你可以请详细说明它 –
的EL表达式(那种'#{}'的东西)不会除非再次渲染'rich:menuItem',否则用新值进行评估。这就是为什么你没有更新它们。 –
我为a4j添加了一个id:其中嵌入了rich:menuItem的面板并试图重新渲染它 –