基于 h:selectOneMenu 值渲染 [重复]
Posted
技术标签:
【中文标题】基于 h:selectOneMenu 值渲染 [重复]【英文标题】:render based on h:selectOneMenu value [duplicate] 【发布时间】:2015-08-30 00:02:56 【问题描述】:我想根据 h:selectOneMenu 选择的值显示 div 层。我cr
eated this code:
<h:selectOneMenu id="zone" value="#download.zone" style="width: 212px;">
<f:selectItem id="select" itemLabel="Select download mirror" itemValue="Select download mirror" />
<f:selectItem id="USA" itemLabel="USA" itemValue="USA" />
<f:selectItem id="Canada" itemLabel="Canada" itemValue="Canada" />
</h:selectOneMenu>
...
private String zone;
public String getZone()
return zone;
public void setZone(String zone)
this.zone = zone;
这是我要根据值显示的 div 层:
<div id="usa_release_server" style="padding-top: 20px;" class="text" rendered="#download.zone == 'USA'">
<h6>USA release server</h6>
</div>
但是当在 h:selectOneMenu 中选择值时,什么也没有发生。你知道我错过了什么吗?
【问题讨论】:
【参考方案1】:rendered
不是有效的 html 属性,它必须用于 JSF 标记。在这里,您可以使用带有layout="block"
的<h:panelGroup>
组件,这将呈现<div>
,并添加一个ajax 组件以在<h:selectOneMenu>
更改时对其进行更新:
<h:form>
<h:panelGroup layout="block" id="usa_release_server"
style="padding-top: 20px;" styleClass="text"
rendered="#download.zone eq 'USA'">
<h6>USA release server</h6>
</h:panelGroup>
<h:selectOneMenu id="zone" value="#download.zone"
style="width: 212px;">
<f:selectItem id="select" itemLabel="Select download mirror"
itemValue="Select download mirror" />
<f:selectItem id="USA" itemLabel="USA" itemValue="USA" />
<f:selectItem id="Canada" itemLabel="Canada" itemValue="Canada" />
<f:ajax event="change" render="@form" />
</h:selectOneMenu>
</h:form>
【讨论】:
由于某种原因,代码示例不起作用。当我选择美国时,h:panelGroup 不可见。也许我需要将组件放入表单? 我实现了代码,但我注意到一个非常小的问题。当我从列表中选择 USA 时,会有 2-3 秒的 AJAX 调用。有没有办法跳过这个时间? 我编辑了我的代码,尝试更新未呈现的组件时犯了一个小错误。 我可以在没有 AJAX 调用的情况下以某种方式呈现 h:selectOneMenu 吗? 是的,使用纯 javascript,但 Ajax 调用不应花费 2-3 秒,除非您的视图中有数千个组件...以上是关于基于 h:selectOneMenu 值渲染 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
<h:selectOneMenu> 为所有下拉列表调用值更改侦听器,而不仅仅是当前
JSF Ajax 渲染使用 Jquery Mobile 丢失 CSS
h:selectOneMenu 中的 f:ajax 监听方法没有执行
Primefaces p:tabView:selectOneMenu的值丢失