【问题标题】:f:ajax not working as expected for h:selectOneRadio inside ui:repeatf:ajax 在 ui:repeat 内的 h:selectOneRadio 没有按预期工作
【发布时间】:2012-06-15 04:55:54
【问题描述】:

我正在渲染一个带有单选按钮的表格。 即,在选择单选按钮时,需要重新渲染整个表单。 但这是行不通的。

这是我的代码:

<h:form id="summaryForm" prependId="false">
<table>
<tbody>
  <ui:repeat var="switchRow" value="#{designBean.switchReport.rowList}" varStatus="rowStatus">
     <tr class="#{rowStatus.even?'even':'odd'}">
      <td>
     <h:selectOneRadio id="switchTypeSelectionId" 
                  name="switchTypeSelection" 
              styleClass="choices"
              onclick="selectRadioButton(this);"
              value="#{designBean.designTool.switchProduct}">
      <f:selectItem itemValue="#{switchRow.rowId}"/>
      <f:ajax event="click" execute="@this" render="@form" listener="#{designBean.showIGBTDetails}"/>
    </h:selectOneRadio>
    </td>
    <ui:repeat var="switchColValue" value="#{switchRow.rowValues}">
        <td>
                    <h:outputText value="#{switchColValue}" /> 
                </td>
    </ui:repeat>
      </tr>
     </ui:repeat>
</tbody>
</table>
</h:form>

【问题讨论】:

  • 您的 &lt;f:ajax listener&gt; 属性在 EL 表达式中包含语法错误。这是否也存在于您的真实代码中?
  • 好的,EL 语法错误因此不是您具体问题的原因。现在我们终于可以前进了 :) 这个问题可以识别为旧 Mojarra 版本中的错误。你在使用 Mojarra 吗?如果有,是哪个版本?如果它相当旧(超过约 6 个月),您是否尝试过升级它?

标签: java jsf-2 uirepeat


【解决方案1】:

我不知道在这种情况下是否需要单击事件。尝试使用 onchange。我记得以前提到过这件事。但是,如果您在已选择的单选项目上单击多次,它不会触发。

另外,您是否尝试过使用表单的 id 而不是 @form?比如 render="summaryForm"。

【讨论】:

  • 当使用表单的 id 而不是 @form 时,就像你建议的 render="summaryForm" 一样,这给了我以下异常。当我查看查看源代码时,生成的 html 组件 id 是相同的 summaryForm。严重:javax.faces.FacesException: 包含未知 id 'semiSelectionForm' - 无法在组件 switchTypeSelectionId 的上下文中找到它
  • 嗯,这听起来很奇怪。但是我忘记了一些事情:也许最好使用冒号,render=":summaryForm"。 JSF 使用冒号作为 ID 分隔符,(考虑一个带有 id foo 的表单嵌套在带有 id bar 的东西中,您可以使用 foo:bar 或 :foo:bar 访问它。我不是这里的专家,何时使用 which 但它可能值得一试。但是,老实说,我有点卡在这里。也许在 元素中使用这些东西会有限制。
【解决方案2】:

经过一番研究,我找到了一个简单的方法来实现这一点, 这是我的答案, 而不是使用 h:selectOneRadio,将其更改为 HTML 并将其包装在 a 中,现在单击 panelGrid 组件调用 ajax 函数/侦听器。

<h:form id="summaryForm" prependId="false">
<table>
<tbody>
  <ui:repeat var="switchRow" value="#{designBean.switchReport.rowList}" varStatus="rowStatus">
     <tr class="#{rowStatus.even?'even':'odd'}">
      <td>
          <h:panelGrid id="switchSelectionId" styleClass="choices">
                <input type="radio" name="switchTypeSelection" value="#{switchRow.rowId}" />
                <f:ajax event="click" execute="@this" render="@form" listener="#{designBean.showIGBTDetails}"/>
          </h:panelGrid>
      </td>
      <ui:repeat var="switchColValue" value="#{switchRow.rowValues}">
        <td>
             <h:outputText value="#{switchColValue}" /> 
        </td>
      </ui:repeat>
      </tr>
     </ui:repeat>
</tbody>
</table>
</h:form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2014-02-23
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多