当前位置: 首页 > 面试题库 >

如何通过p:ajax使用OmniFaces Ajax.updateColumn()或Ajax.updateRow()

闻人弘雅
2023-03-14
问题内容

我正在尝试使用OmniFaces
1.3(SNAPSHOT)Ajax实用程序的Ajax.updateColumn()方法。更具体地说,我想用Ajax.updateColumn(table,1)代替使用p:ajax
update =“:pageContentPanel”,它是一个h:panelGroup(或p:outputPanel),其中包含以下xhtml。

<h:dataTable id="dt_tripDates" style="width: 200px !important;"
             var="tripDate" value="#{pf_ordersController.tripDates}">

    <p:column style="text-align: right !important;">
        <h:outputText id="rowNumber" value="#{tripDate.rowNumber}" />
    </p:column>

    <p:column style="text-align: center !important;">
        <p:calendar id="tripDate" value="#{tripDate.tripDate}"
                    size="16" label="Trip Date"
                    pattern="MM/dd/yyyy" navigator="true"
                    onchange="changeOthersOnDateChange(this);">
            <p:ajax partialSubmit="false" event="dateSelect"
                    listener="#{pf_ordersController.tripDateSelectedOnAddUsingTemplate}"
                    update=":pageContentPanel"/>
            <f:convertDateTime pattern="MM/dd/yyyy" />
        </p:calendar>
    </p:column>

</h:dataTable>

在Bean中,我具有以下内容,这些内容由p:ajax listener =“ …”引用:

public void tripDateSelectedOnAddUsingTemplate(DateSelectEvent event) {
    DateTime dt, today = DateTime.now(),
             tripDateTime = new DateTime(event.getDate());
    String clientId = event.getComponent().getClientId();
    Integer pos = clientId.indexOf(":tripDate") - 1,
            rowNumber = Integer.valueOf(clientId.substring(clientId.lastIndexOf(":", pos) + 1, pos + 1));
    /*
     * clientId = orderAddUsingTemplateForm:dt_tripDates:0:tripDate
     * id = tripDate
     */
    /*
     * if tripDates in the list, that follow the argument tripDate in the list,
     * have today's Date, then set them to the argument
     */
    for (int i = rowNumber; i < nbrOfTripDates; i++) {
        tripDates.get(i).setTripDate(tripDateTime.toDate());
    }
    // OmniFaces Ajax utility to update UIData columns
    Ajax.updateColumn(tripDatesDataTable, 1);
}

尝试使用Ajax.updateColumn()时,我将“ HtmlDataTable tripDatesDataTable”作为该bean的属性添加了。

该bean是JSF
@SessionScoped托管bean。请让我知道执行p:ajax(属于上述xhtml中的p:calendar)时如何调用Ajax.updateColumn()。谢谢。


问题答案:

关键点是,您必须以UIData某种方式拥有该组件的句柄,才能将其传递给Ajax#updateColumn()。在您的特定情况下,最简单的方法是event.getComponent()借助Components#getClosestParent()

UIData tripDatesDataTable = Components.getClosestParent(event.getComponent(), UIData.class);
// ...
Ajax.updateColumn(tripDatesDataTable, 1);

请注意,您也可以通过这种方式获取行号,而无需分解客户端ID。

int rowNumber = tripDatesDataTable.getRowIndex();


 类似资料:
  • 我有一个JavaWeb7项目,在该项目中,我希望在每个事件上,直接在支持bean中管理的实体实例上编写JSF组件值。只要添加一个JSR303验证约束,就可以很好地工作,比如在实体属性之一上添加。只要违反约束,就不再在具有约束的属性上设置值。没有根据NetBeans调试器调用setter;另一个属性工作很好,这使我相信我已经隔离了问题。我想在我想要的时候执行验证,因此,如果我想要的话,可以设置无效的

  • 问题内容: Doc缺少示例…您如何基于密钥使用? 尝试根据键插入。 将插入位置放在。 从文档… A,X,LO = 0,HI = LEN(a)中 插入 X 在 一个 按排序顺序。这等效于假设 a 已经排序。请记住,O(log n)搜索由缓慢的O(n)插入步骤主导。 用法示例: 我希望把后排序列表中使用。眼下看跌期权的......因为我不使用的钥匙,做插入…文档不显示做用钥匙插入。 问题答案: 这确实

  • 我有一个HTTP post请求,它以一个JSON作为请求体,其中包含以下内容: 向服务器请求后,我只得到一个图像作为响应(而不是任何东西(如JSON))。适当的图像是根据请求创建的,没有网址。我的服务地址是: 我的回复标题是: 我不知道是用改造还是毕加索来得到这张照片, 在Picasso中:我无法发送请求正文中的JSON数量。 在改造:我不能没有url的照片(地址指向照片像www.site.com

  • 问题内容: 我有一个返回sys-refcursor的Oracle函数,当我使用Hibernate调用此函数时,出现以下异常。 我该如何解决? Oracle功能 我的实体班 在DAO中 问题答案: 可以通过以下方式使用EntityManager调用Oracle函数或存储过程。 对于Oracle功能 创建一个以sys_refcursor作为返回类型的函数 在实体类中,将函数定义为 对于Oracle存储

  • 根据developer.yahoo.com/mail/和IMAP的回复: Yahoo Mail可以通过IMAP使用OAuth(2)身份验证访问。 我在https://developer.yahoo.com/apps/上注册了我的应用程序,所以我得到了客户端ID和客户端机密。我没有找到任何与邮件相关的作用域(API权限)。然而,我选择了所有API权限,这是在我注册我的应用程序时提出的。 我尝试实现O

  • 问题内容: 我希望能够使用创建存储过程,以后再通过php使用它。 但是我不知道该怎么办? 据我了解,我发现我们无法通过来管理存储过程。 还有什么其他工具可以管理存储过程? 我什至不确定通过PHP使用存储过程是否是更好的选择。 有什么建议吗? 问题答案: 由于使用查询创建,更改和删除了存储过程,因此您实际上可以使用phpMyAdmin对其进行管理。 要创建存储过程,可以使用以下命令(必要时进行更改)