【问题标题】:JSF Ajax reset previously rendered input component values?JSF Ajax 重置以前呈现的输入组件值?
【发布时间】:2013-02-26 09:40:07
【问题描述】:

我对 JSF 和 ajax 有一个小(但很重要)的问题。表格在这里:

 <h:form>
        <h:panelGrid id="pg1" columns="2">

            <h:outputText value="Type: "/>

            <h:selectOneMenu id="selectOne" value="#{personBean.type}">
                <f:selectItems value="#{listBean.personTypes}"/>
                <f:ajax event="valueChange" render="pg2"/>
            </h:selectOneMenu> 

        </h:panelGrid>

        <h:panelGrid id="pg2" columns="2">

            <h:outputText value="Really bad?" rendered="#{personBean.type=='BAD'}"/>

            <h:selectBooleanCheckbox id="checkbox" value="#{personBean.reallyBad}" rendered="#{personBean.type=='BAD'}">
                <f:ajax event="click"/>
            </h:selectBooleanCheckbox>

        </h:panelGrid>

        <h:commandButton value="Ajax Submit" action="#{personBean.printValues}">
            <f:ajax execute="@form"/>
        </h:commandButton>
    </h:form>

PersonBean 是一个简单的 bean,它有一个枚举 PersonType,它有两个值:NICE、BAD 和一个名为 realBad 的布尔值。 ListBean 返回列表中的枚举值以填充 selectOneMenu。

基本上,当我选择 BAD 时,会呈现布尔复选框的面板,我可以在其中勾选它以表示一个人真的很糟糕。如果我愿意,我可以提交表格。问题是当我勾选复选框然后再次选择 NICE 时,即使未呈现复选框,它仍然被勾选。所以当我提交我的表格时,这个人可能很好,也很糟糕,这没有任何意义。

,而不是必须再次选择不良的框来取消选中框,而是我可以将复选框及其输入值重置为false时的方式吗?我对 JSF 的 ajax 有点陌生!谢谢。

ps。我正在使用 commandButtons 操作在提交时打印两个输入的值以验证结果...

【问题讨论】:

  • h:selectBooleanCheckbox 中删除f:ajax 时是否存在问题?

标签: ajax jsf


【解决方案1】:

更改菜单时需要手动清除复选框。

<f:ajax listener="#{personBean.setReallyBad(false)}" render="pg2" />

顺便说一句,您在代码中的两个 &lt;f:ajax event&gt; 值已经是默认值。忽略它们。

【讨论】:

  • 感谢工作!所以在复选框上我可以只使用 并且它仍然可以在没有事件值的情况下工作?另外,我能得到你的意见吗......在你看来有模型类型逻辑是不好的做法,即 render="#{personBean.type=='BAD'}" 吗?我在其他地方被告知它是,主要是出于调试原因。
  • UIInput 组件中,event 属性已经默认为valueChange,这反过来会在复选框的情况下生成click。另见stackoverflow.com/questions/7886453/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 2021-03-03
相关资源
最近更新 更多