[英]Get updated value from bean through JavaScript in JSF
我在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>
在refreshItems()
中,我将所有变量设置为true。
itemDisplayBean.java
private boolean 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
(即使在后备bean中将其设置为true),并且该面板未显示。 如果我刷新页面,那么我将从后备bean( if( #{itemDisplay.availableBags} )
获取更新的值,然后显示为面板。任何人都可以帮助我为什么仅通过刷新页面来获取更新的值。
如前所述,EL表达式在页面呈现并变为静态文本时进行评估。
您可以使用@data
,例如:
<rich:menuItem data="#{itemDisplay.availableBags}"
oncomplete="showPanel('#{itemValue}', event.data)" … >
event.data
将包含event.data
的当前值(您甚至可以将其指向一个对象)。
编辑:在RichFaces 3.x JS参数只是data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.