gpt4 book ai didi

jsf - a4j :commandButton reRendering rich:datatable

转载 作者:行者123 更新时间:2023-12-03 02:42:58 25 4
gpt4 key购买 nike

我的问题是,我试图让数据表中的一列默认显示输出文本,并在按下命令按钮时将其替换为输入文本。还没有找到解决办法。顺便说一句,这是第一篇文章。

我有一个 a4j:commandButton,我希望重新渲染我的数据表的这一部分

<a4j:commandButton reRender="yieldTable" action="#{yieldSearch.activateVisible()}"
id="modify" styleClass="editLargeIcon" value="Modify">
</a4j:commandButton>

<rich:dataTable id="yieldTable" value="#{yieldSearch.yfitem.yielditem}" var="_yield">
<rich:column>
<f:facet name="header">%-YLD</f:facet>
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}">
</h:outputText>
<h:inputText rendered="#{yieldSearch.visible}" />
</rich:column>

我想激活这个方法(只显示相关代码)

@Name("yieldSearch")
@Scope(ScopeType.CONVERSATION)
public class YieldSearch implements Serializable{

private Boolean visible;

public void activateVisible(){
this.setVisible(true);
System.out.print(true);
}

public void setVisible(Boolean visible) {
this.visible = visible;
}

public Boolean getVisible() {
return visible;
}

非常感谢任何帮助。

最佳答案

您需要将两个组件包装在 <a4j:outputPanel id="myPanel" ajaxRendered="true"/> 中。两个组件无法重新渲染的原因是您设置为 rendered="false" 的组件不会在初始 View 呈现时发送到浏览器。

<a4j:outputPanel id="myPanel" ajaxRendered="true">
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}"/>
<h:inputText rendered="#{yieldSearch.visible}" />
</a4j:outputPanel>

ajax 刷新工作的方式是使用 javascript 在 DOM 树中定位 clientId 以使用新标记进行更新,即组件必须已经在 DOM 树中。由于您设置了 rendered="false" ,该组件一开始就不在 DOM 树中。因此,在 ajax 请求中,浏览器不知道您在说什么,因为它找不到要更新的 clientId。

使用 ajaxRendered="true" 的输出面板,您正在刷新整个outputPanel,因此ajax刷新将更新该组件作为一个整体,以及您嵌套在其中的任何内容

关于jsf - a4j :commandButton reRendering rich:datatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com