当前位置: 首页 > 知识库问答 >
问题:

JSF Ajax在更改时重新渲染

仲孙毅
2023-03-14

我正在尝试获得一个h:textInput以在更改时重播,我已经用a4j:ajax和f:ajax进行了尝试。

使用a4j:ajax时:

<h:panelGroup id="xyzPG">

<ui:repeat var="var" ... >
   ...
  <h:inputText id="#{idController.getIdXYZ(var.id)}" 
   value="#{someModel.value}" 
   size="3" 
   styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
   <a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
  </h:inputText> 
  ...
</ui:repeat>  
</h:panelGroup>

这在面板第一次更新后第一次起作用,它停止更新modell,并且监听器也没有被调用。但是,会触发渲染,从而显示旧值。

现在,当我用f:ajax替换a4j:ajax时,我得到一条错误消息,即在xyzInput中找不到id xyzPG。

<f:ajax event="change" render="@this" listener="#{listener.doSomeStuff}" />

当我尝试将重新渲染限制为inputText时,它总是更新模型并调用侦听器,但是h: inputText不会重新渲染。

我已经尝试在inputText周围放置另一个panelGroup,但这也不起作用。

我们不使用h: dataTable的原因是因为我们必须生成具有以下布局的Table:

---------------------------- 
| dataSet1     | dataSet 2 |
----------------------------
| dataSet3     | dataSet 4 |
etc...

因此,我们使用ui:repeat的offset和step属性。

共有2个答案

施德运
2023-03-14

在没有看到您的支持bean代码的情况下,我认为您应该使用

<h:inputText id="#{idController.idXYZ}"

而不是

<h:inputText id="#{idController.getIdXYZ()}" 
冯皓
2023-03-14
  1. 根据设计,您无法使用渲染时间标记(如

>

  • 编译时V渲染时标记

    为了进行视图构造和ajax更新,在渲染视图之前,组件的id必须在视图构造期间可用<代码>

      <c:forEach items="#{idController.itemsList}" var="theVar">
         <h:inputText id="#{idController.getIdXYZ(theVar.id)}" value="#{someModel.value}" size="3" styleClass="#{errorController.getErrorStateStyleId(idController.getIdXYZ())}">
             <a4j:ajax event="change" render="xyzPG" listener="#{listener.doSomeStuff}" />
         </h:inputText> 
      <c:forEach/>
    

    您不太可能从

      <f:ajax event="change" render=":form1:xyzPG" listener="#{listener.doSomeStuff}"/>
    

    这假设xyzPG直接包含在

  •  类似资料:
    • 问题内容: 我正在尝试将表示性组件与容器组件分开。我有一个和一个。容器负责触发redux操作,以根据当前用户获取适当的网站。 问题是在最初呈现容器组件之后,异步获取了当前用户。这意味着容器组件不知道它需要重新执行其函数中的代码,该代码将更新数据以发送到。我认为我需要在其props(user)之一更改时重新渲染容器组件。如何正确执行此操作? 问题答案: 您必须在方法中添加条件。 该示例用于比较对象。

    • 我在一个应用程序的前端原型上工作,该应用程序具有给定的JS、React和CoreUI4 React技术栈。我来自Python背景,在网络开发和我给定的技术堆栈方面没有太多经验。当我不得不开始使用钩子时,这一点变得很明显。 问题 我真的不明白为什么它不更新我的和/或不渲染。我需要一个条件渲染,我也使用。 我试图: 从我的主应用程序中传递一个更大的状态,一旦我启动条件逻辑(挂钩规则)就无法工作。 当我

    • 我试图将表示组件与容器组件分开。我有一个和一个。容器负责触发redux操作,以基于当前用户获取适当的站点。 问题在于,在容器组件最初呈现之后,当前用户是异步获取的。这意味着容器组件不知道需要在其函数中重新执行代码,该函数将更新数据以发送到。我想当容器组件的一个道具(用户)发生变化时,我需要重新渲染它。如何正确地执行此操作?

    • 当按下{Link}并更改路由时,即使在react router dom的交换机组件之外,报头组件NavBar也会保持重新命名。 这里是文件: Main index.js文件: Home.js Contact.js 当前的项目非常简单:index.js文件包含Home和Contact组件,NavBar组件作为交换机外部的头。

    • 问题内容: 即使dataSource中的数据未更改,是否也可以强制重新渲染ListView?我的应用程序中的选项卡栏中有一个ListView,我希望每次选择该选项卡时都重新绘制它,而不管数据是相同还是已更改。 我尝试使用参数,但这没有帮助。任何帮助将非常感激 问题答案: 因此,据我所知,您的用例是由于更改而重新呈现ListView的所有行。我不知道是什么,要由您确定,但是我会用它来解释我的答案:

    • 我有一个带有两组按钮(功能和目标)的界面。当我点击一个按钮时,我希望它从一个团队转到另一个团队。我正在用react和redux实现这一点。我唯一的问题是,当状态更新并且我成功地记录了更新的状态时,除非我使用forceUpdate(),否则组件不会更新。我不明白的是,既然状态更新成功,组件不应该自动重新渲染吗? 一些js 正如您所看到的,当我单击一个按钮时,我触发updateLists函数,该函数将