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

p:datatable上的JSF Primefaces ajax

蒯嘉赐
2023-03-14

我在我的UI上使用JSF的Primefaces。我对p:datatable上的ajax有一个特定的要求。这是我的项目的样本页面:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:comp="http://java.sun.com/jsf/composite/components/">

    <ui:define name="content">

        <h:form id="form1">

            <p:growl id="messages" showDetail="false" />

            <p:panel header="Available Rows" style="width: 15%;">

                <p:dataTable id="table" value="#{rowBean.rows}" var="row" 
                    widgetVar="50" style="width: 60px;" editable="true">

                    <p:ajax event="rowEdit" listener="#{rowBean.onEdit}" 
                        update="form1:messages" />
                    <p:ajax event="rowEditCancel" listener="#{rowBean.onCancel}" 
                        update=":form1:messages" />

                    <p:column>
                        <f:facet name="header">  
                            <h:outputText value="Row ID" />
                        </f:facet>
                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{row.id}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText value="#{row.id}" 
                                    style="width:100%" label="Row ID">
                                </p:inputText>
                            </f:facet>
                        </p:cellEditor>
                    </p:column>

                    <p:column>
                        <f:facet name="header">  
                            <h:outputText value="Row Value" />
                        </f:facet>
                        <p:cellEditor>
                            <f:facet name="output">
                                <h:outputText value="#{row.value}" />
                            </f:facet>
                            <f:facet name="input">
                                <p:inputText disabled="true" value="#{row.value}" 
                                    style="width:100%" label="Row Value">
                                </p:inputText>
                            </f:facet>
                        </p:cellEditor>
                    </p:column>

                    <p:column style="width:6%">
                        <p:rowEditor />
                    </p:column>

                </p:dataTable>

            </p:panel>

            <p:spacer height="5px;"/>

            <p:panel id="createPanel" header="Create Row" closable="false" toggleable="true" 
                collapsed="true" style="width: 15%;">
                <p:panelGrid columns="6">

                    <h:outputLabel for="rowBean" value="Row ID" />
                    <p:inputText value="#{rowBean.row.id}" 
                        required="true" label="Row ID" style="width:125px" />

                    <h:outputLabel for="rowBean" value="Row Value" />
                    <p:inputText value="#{rowBean.row.value}" 
                        required="true" label="Row Value" style="width:125px" />

                    <f:facet name="footer">
                        <p:commandButton value="Create" action="#{rowBean.createRow}" 
                            update=":form1" />
                    </f:facet>
                </p:panelGrid>
            </p:panel>

        </h:form>

    </ui:define>

</ui:composition>

在这里,我有一个数据表,其中列出了创建的所有行。每行都有 id 和值。值是可编辑的。窗体中还有一个面板用于创建新行。后备 Bean 预先填充了所有创建的行,其中包含@PostConstruct。支持Bean有其他方法来编辑,取消和创建。此页面正在运行,下面给出的是新要求。

在某些情况下,可能存在与每行相关联的错误。如果行中附加了错误,则需要像链接一样更新值文本。单击链接时,需要将行ID和参数传递给后备bean。通过这些参数,支持bean获取错误详细信息并将其传递给页面。则需要在弹出窗口上显示错误消息。

你能告诉我怎么做吗?

共有2个答案

曹建华
2023-03-14

也许是这样

<f:facet name="output">
    <h:outputText value="#{row.value}" rendered="#{!row.hasError}" />
    <h:commandLink value="#{row.value}" rendered="#{row.hasError}" command="#{row.command(parameters..)}" />
</f:facet>
公孙志
2023-03-14

在 XHTML 方面:

<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />

在JAVA端,在按下按钮时调用的函数中:

if(error) {    
    FacesContext.getCurrentInstance().addMessage(
    null,
    new FacesMessage(FacesMessage.SEVERITY_WARN, "Error",
    "Your error message.")); 
}

PD:这是我的第一个答案,我已经习惯了post选项,如果你没有正确地看到我的消息,我很抱歉;)

 类似资料:
  • 我有一个<代码> 相应的 受管 Bean 如下所示。 当<代码> 我避免了许多事情,如分页,以有一个最小的例子。 现在,我需要填充这个<代码> 管理的关联JSF如下所示。 现在,当<code>时 仅当托管bean使用更广泛的范围(如)修饰时才调用(如果设置为true) 为什么不<代码> 在这种情况下,是否必须指定具有比请求范围更宽的托管bean?

  • 我目前在使用PrimeFaces 4.0的dataTable中的列的呈现属性上有一个小问题。我的表中有一列不应该总是显示,所以我使用了它的呈现属性并从我的支持bean中获取值。这是第6列也是最后一列。dataTable位于一个p:对话框中,该对话框将显示在方法的末尾。 渲染属性似乎工作正常,因为当showColumn为false时,该列将不会显示,反之亦然,但存在一个问题。如图所示,“未找到记录”

  • Animal.java 我为它创建了以下自定义断言: AnimalAssert.java 编辑:基于第一个答案(cglib需要一个),我用一个no arg构造函数更新了动物类,但是抛出了相同的异常

  • 我的应用程序一直在许多Android平台上报告这个问题(4.1、4.0.4、2.3.6.…)。但我无法在我的手机上复制这个问题。我已经在Google上搜索了这个问题,但堆栈跟踪似乎与我的不一样。

  • 我有一台带有Intel CPU的Windows机器(在引导菜单上启用VMX)。我使用VirtualBox在上面运行Ubuntu Guest。我在上面运行qemu,以运行另一个Guest OS,使用kvm(选项)。 我在尝试插入kvm-intel模块时收到以下错误: 我已经检查了来宾操作系统中的vpx标志,但我也没有看到 有没有办法在来宾Ubuntu操作系统中启用kvm支持,以便我可以在Ubuntu

  • 我试图从java程序中使用Spark SQL,其中pom.xml中的依赖关系指向Spark版本1.6.0。下面是程序 但是,我在线程“main”java.lang.nosuchmethoderror:org.apache.spark.sql.sqlcontext.sql(ljava/lang/string;)lorg/apache/spark/sql/dataframe中出现异常;我正在创建一个平