A4J:命令按钮重新描绘富:数据表(a4j:commandButton reRendering ri

2019-07-03 17:27发布

我的问题是,我想有一列在我的数据表显示默认的的outputText,并按下命令按钮时替换用的inputText。 还没有找到一个解决方案。 第一篇文章的方式。

我有一个A4J:的commandButton,我希望重新描绘我的DataTable的这部分

<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;
}

任何帮助非常赞赏。

Answer 1:

您需要包装在两个部件<a4j:outputPanel id="myPanel" ajaxRendered="true"/> 这两个组件都无法被重新描绘的原因是你已经设置为组件rendered="false"将不会被发送到初始视图渲染的浏览器。

<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更新的内容。

使用outputPanel与ajaxRendered="true" ,你刷新整个outputPanel,所以阿贾克斯刷新将更新组件作为一个整体,不管你已经嵌套在



文章来源: a4j:commandButton reRendering rich:datatable