【问题标题】:f:ajax render form componentf:ajax 渲染表单组件
【发布时间】:2013-09-19 06:16:33
【问题描述】:

我想根据我是否选择的复选框在表单中呈现单个组件(h:selectManyCheckbox)

<h:form> 
    <h:selectBooleanCheckbox value="#{bean.var}">
        <f:ajax event="click" render="employeeCheckboxes" />
    </h:selectBooleanCheckbox>

    <h:selectManyCheckbox 
        id="employeeCheckboxes"
        value="#{bean.checkboxes}"
        rendered="#{var}">
    </h:selectManyCheckbox>
</h:form>

但是,组件不会在选中或取消选中复选框时重新呈现。但是,我可以重新渲染整个表单,但我不希望这样。

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    您不能引用&lt;f:ajax render&gt; 中的组件,该组件首先从未在 HTML 输出中呈现。 &lt;f:ajax render&gt; 在幕后使用 JavaScript document.getElementById() 来查找 HTML 元素,以便使用来自 ajax 响应的新 HTML 结构对其进行更新。但是,如果一个 JSF 组件首先从未在 HTML 输出中呈现,那么 JavaScript 也无法在任何地方找到它。

    您需要将它包装在另一个始终呈现的组件中。

    <h:form> 
        <h:selectBooleanCheckbox value="#{bean.var}">
            <f:ajax render="employeeCheckboxesGroup" />
        </h:selectBooleanCheckbox>
    
        <h:panelGroup id="employeeCheckboxesGroup">
            <h:selectManyCheckbox 
                id="employeeCheckboxes"
                value="#{bean.checkboxes}"
                rendered="#{bean.var}">
            </h:selectManyCheckbox>
        </h:panelGroup>
    </h:form>
    

    (请注意,我删除了event="click",因为它已经是默认设置了)

    另见:

    【讨论】:

      【解决方案2】:

      您好,我认为您错过了托管 bean 名称

      渲染属性

      复选框标记。

      【讨论】:

      • 如果您不能从头顶上确定,请在本地重新创建并测试问题。
      • @BalusC 好的 BalusC 先生
      • @BalusC 能否请您参考这个问题并给出解决方案stackoverflow.com/questions/18907770/…
      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多