【问题标题】:how to show hide a h:panelgroup while click on a radio button如何在单击单选按钮时显示隐藏 h:panelgroup
【发布时间】:2014-04-25 05:37:39
【问题描述】:

我目前正在解决一个问题,我想根据用户选项在同一 <td> 下显示和隐藏一些字段。 条件是,当用户单击客户单选按钮时,我必须显示与客户相关的输入字段,而当他单击卖方选项单选按钮时,我必须向他显示卖方相关信息。 默认情况下,我正在显示包含与客户相关信息的 panelGroup 我的代码如下

<h:panelGroup id="customnerPanel" rendered="#{saleBean.saleVO.personType == 1}">
  all input fields related customer goes here
</h:panelGroup>
<h:panelGroup id="sellerPanel" rendered="#{saleBean.saleVO.personType == 2}">
  all input fields related seller goes here
</h:panelGroup>

现在的问题是,在页面加载时它会向我显示正确的客户面板,但是当我将单选按钮更改为卖方单选按钮时,它应该隐藏客户面板并向我显示卖方面板,因为我正在重新渲染两个面板关于单选按钮的变化。我的单选按钮相关代码如下:

<h:selectOneRadio id="radioChangeTenureButton" layout="lineDirection" value="#{saleBean.saleVO.personType}">
    <f:selectItem id="customerTypeId" itemLabel="For Customer" itemValue="1"  />
    <f:selectItem id="sellerTypeId" itemLabel="For Seller" itemValue="2" />   
    <a4j:support event="onclick" action="#{saleBean.updateCase}" reRender="customnerPanel,sellerPanel"  />
</h:selectOneRadio> 

有什么想法吗?

【问题讨论】:

  • 我在这里找不到任何代码?
  • 尝试将两个面板包装在一个面板中并使用 ajax 请求重新呈现它。
  • @AdrianMitev thx...它解决了我的问题。这是一个愚蠢的错误

标签: jsf richfaces


【解决方案1】:

当由于 ajax 请求而重新渲染元素时,您不能通过直接重新渲染来隐藏组件,因为 JSF 不会将隐藏(渲染的属性评估为 false)组件发送到浏览器,并且 JSF 不知道元素应该得到隐藏在 DOM 中。 为了解决这个问题,创建一个包装元素并在执行 ajax 请求时重新呈现它。使用这种方法,当响应返回到浏览器时,隐藏块的 HTML 将丢失,并且不会进入浏览器的 DOM。代码应该变成这样:

<h:panelGroup id="panelWrapper">
  <h:panelGroup id="customnerPanel" rendered="#{saleBean.saleVO.personType == 1}">
    all input fields related customer goes here
  </h:panelGroup>
  <h:panelGroup id="sellerPanel" rendered="#{saleBean.saleVO.personType == 2}">
    all input fields related seller goes here
  </h:panelGroup>
</h:panelGroup>

并且你应该在 a4j:support 的 reRender 属性中设置包装组件的 id(本例中为 panelWrapper)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多