【问题标题】:render based on h:selectOneMenu value [duplicate]基于 h:selectOneMenu 值渲染 [重复]
【发布时间】: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 中选择值时,什么也没有发生。你知道我错过了什么吗?

【问题讨论】:

    标签: jsf jsf-2.2


    【解决方案1】:

    rendered 不是有效的 HTML 属性,它必须用于 JSF 标记。在这里,您可以使用带有layout="block"&lt;h:panelGroup&gt; 组件,这将呈现&lt;div&gt;,并添加一个ajax 组件以在&lt;h:selectOneMenu&gt; 更改时对其进行更新:

    <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 秒,除非您的视图中有数千个组件...
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2022-01-14
    • 2021-07-29
    相关资源
    最近更新 更多