Richfaces:对数据表内的 inputText 的 a4j 支持(操作、actionListener)

问题描述 投票:0回答:1

我有一个 JSP 页面,其中必须允许用户编辑列中的数据,并且在提交表单时更新数据库中的相应表。该表中的行数是可变的。

对于可编辑信息字段,我在 JSP 页面中有以下代码片段(让我们将其命名为 Block A):

  <h:inputText value="#{myBackingBean.theFieldValue}" >
    <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}" action="#{myBackingBean.theAction}"/>
  </h:inputText>

以下代码片段(让我们将其命名为Block B)来自支持bean:

public String theAction() {
    String outcome = null;
    System.out.println("the action method was invoked");
    return outcome;
}

public void theActionListener(ActionEvent actionEvent) {
    System.out.println("the action listener method was invoked");
}

如您所见,每当调用这些方法时,都会打印到控制台输出。

我的问题是: 当我将 Block A 放入以下块(表单中的 single inputText 组件)时:

<h:form id="myForm">
  (...)
    here I put Block A
  (...)
</h:form>

B 块 调用没有问题。但是,如果我将 Block A 放入 rich:dataTable 组件中(表单中的multiple inputText 组件),以便将每行的 inputText 值存储到数据库(这里是我需要调用操作的地方)和/或 actionListener 方法):

<h:form id="myForm">
  <rich:dataTable id="myDataTable" value="#{myBackingBean.myObjectList}" var="item" binding="#{myBackingBean.myObjectHtmlDataTable}" rendered="#{!empty myBackingBean.myObjectList}" rows="20">
    (...)
      <rich:column>
          here I put Block A
      </rich:column>
    (...)
  </rich:dataTable>
</h:form>

在这种情况下,永远不会到达B 块

我正在使用 JSF 1.2RichFaces 3.3.3,所有需要的 bean 和导航规则都已正确配置。所有需要的 getter 和 setter 都在各自的类中。

请您给我一些建议以使我的代码正常工作吗?预先感谢。

datatable richfaces action actionlistener ajax4jsf
1个回答
0
投票

我测试了你的代码,它工作得很好。两种操作方法都可以运行。

可能是由于您表单中的其他组件在服务器上处理时出现错误,导致 bean 的方法无法运行。

你可以尝试使用

<h:inputText>
限制服务器只处理改变的
<a4j:region>
。如果之后可以调用action方法,则可以确认是由于你的表单中的其他组件造成的。

<rich:column>
  <a4j:region>
        <h:inputText value="#{myBackingBean.theFieldValue}" >
                <a4j:support event="onchange" actionListener="#{myBackingBean.theActionListener}"   action="#{myBackingBean.theAction}"/>
        </h:inputText>
    </a4j:region>
</rich:column>

如果您的

<h:form>
onsubmit()
事件处理程序,请确保它返回 true 才能提交表单。

© www.soinside.com 2019 - 2024. All rights reserved.