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

f:在第二次ajax调用期间未设置参数

上官淮晨
2023-03-14

我有简单的数据表(Primefaces)。在该表中,最后一列包含一个按钮,该按钮应设置一个参数(f:param)。我正在使用带有ajax=“true”参数的p:commandButton。按钮绑定到操作(托管bean中的方法)。一切都很好,直到我第二次单击datatable中的按钮。为什么?

代码看起来像:

<p:dataTable id="zones" value="#{appointmentForm.matchingZones}"
             var="zone" paginator="true" rows="10"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
             emptyMessage="#{msg['label.noAvailableZones']}">
    <p:column headerText="#{msg['label.choose']}">
        <p:commandButton value="#{msg['label.choose']}"
                         actionListener="#{appointmentForm.handleChosenZone}" process="@this"
                         update=":verificationForm" ajax="true">
            <f:param name="zoneId" value="#{zone.id}"/>
        </p:commandButton>
    </p:column>
</p:datatable>

当我第一次点击任意一行的按钮时,参数设置正确,但在第二次点击时,我得到了NullPointerException。

有什么想法吗?

共有1个答案

卫嘉泽
2023-03-14

我找错地方了。Zone是BaseEntity的一个子类,包含Id、创建日期等

如果您使用BaseEntity或类似的东西,请确保记住序列化。就我而言,我有一个区域:

public class Zone extends BaseEntity implements Serializable {
    ...
}

和基本实体:

public class BaseEntity {
    @ID
    @GeneratedValue
    protected Long id;
    ...
}

因此id字段没有序列化。解决方案是添加公共类BaseEntity实现Serializable。

 类似资料:
  • 问题内容: 我需要每5分钟创建一个ajax调用。我要下面的代码。有人可以告诉我如何修改此代码以每5分钟运行该ajax吗? 问题答案: 在最简单的级别上,将AJAX调用放入函数中,然后创建一个间隔:

  • 程序应该接受两个名称,如果它们的长度相同,它应该检查它们是否是相同的单词。如果是同一个单词,它将打印“名称相同”。如果它们长度相同但字母不同,则会打印“名称不同但长度相同”。我遇到问题的部分在最后4行。 运行此代码时,它会显示: 非常感谢您的任何建议。

  • 问题内容: 我试图在加载器图标和​​成功的html之间添加一个小的延迟(2秒)。 我尝试使用的是setTimeout并放入延迟号。这是行不通的,所以我希望您能告诉我正确的方法是什么。 我的ajax代码: 现在,它运行得非常快。希望有人能帮忙。 问题答案: 应该用在里面 。

  • 我希望< code>[InstallDelete]部分调用一个自定义函数,该函数将检查是否安装了旧版本(在这种情况下,某些文件需要在安装新版本之前删除)。 从我的Inno安装脚本中提取。首先,如果安装了旧版本,该函数返回True。 然后是应该调用这个函数的部分: 不幸的是,生成的设置似乎从来没有调用自定义函数(当用这个设置安装我的程序时,我从来没有得到位于自定义函数中的MsgBox,文件也没有被删

  • 我尝试做什么: 我希望HashSet中充满程序不知道的新词。用户按下主机上的“转换”按钮。带有单词的文件的路径在主框架上给出。 如果单词是新单词,则会打开一个J对话框并要求插入新单词(因此您可以更改拼写,例如第一个字母大…)。 如果用户按下JDialog上的“写入”按钮,该单词将添加到HashSet中。 但是如果我在那之后打印我的HashSet,则只显示“旧”值。当我第二次按下主框架上的“转换”按

  • 这是调用方法x次的时循环。 PlayerVsPlayer。results()请求用户输入并调用另一条语句。 这是compare.win分数(Player1,Player2)中的如果其他语句的片段: 我遇到的问题是,如果其他语句第一次执行时,它工作得很好。第二次,如果其他语句跳过并返回第一次调用的值。有人知道为什么会这样吗?谢谢你的帮助!