创建主从表和对话框,如何重用相同的对话框来创建和编辑

2023-12-29

我正在尝试创建一个对话框,该对话框将用于创建对象和更新对象。因此,如果我碰巧单击“新建”按钮,我将看到一个包含要填充的空字段的对话框,或者如果我单击某个条目的编辑按钮,该条目的数据将显示在对话框中进行更新。

按照 primefaces 展示版本 5.2 中的示例,我可以以只读 outputText 形式呈现数据,但是当我将其更改为 inputText 时,该字段仍为空。以下代码是我所拥有的示例:

<h:form id="form">    
  <p:dataGrid id="guestList" var="guest" value="${guestList.guests}" columns="3" paginator="true" rows="20">
    <f:facet name="header">
      Guest List
    </f:facet>

    <p:panel>
      <h:outputText value="${guest.name}" />
      <br />
      <h:outputText value="${guest.street}" />
      <br />
      <h:outputText rendered="#{guest.street2.length() gt 0}"
        value="${guest.street2}" />
      <h:panelGroup rendered="#{guest.street2.length() gt 0}">
        <br />
      </h:panelGroup>
      <h:outputText value="${guest.city}, " />
      <h:outputText value="${guest.state} " />
      <h:outputText value="${guest.zipCode}" />
      <p:commandButton update="@form:newGuestDetail" oncomplete="PF('newGuestDialog').show()" icon="ui-icon-edit" styleClass="ui-btn-inline">
        <h:outputText styleClass="ui-icon ui-icon-edit" style="margin:0 auto;" />
        <f:setPropertyActionListener value="#{guest}" target="#{guestList.selectedGuest}" />
      </p:commandButton>
    </p:panel>
  </p:dataGrid>

  <p:dialog header="#{guestList.hasSelected() ? 'Edit Guest' : 'New Guest'}" widgetVar="newGuestDialog" modal="true" showEffect="fade" hideEffect="fade">
    <p:outputPanel id="newGuestDetail">
      <h:outputText value="'#{guestList.selectedGuest.name}'"/>
      <p:inputText id="guestName" value="#{guestList.hasSelected() ? '' : guestList.selectedGuest.name}" pt:placeholder="Name"/>
      <p:commandButton value="#{guestList.selectedGuest == null ? 'Create Guest' : 'Update Guest'}"/>
    </p:outputPanel>
  </p:dialog>
</h:form>

hasSelected() 方法评估所选访客是否为 null,如果不为 null,则返回 true。单击 commandButton 时应设置 selectedGuest,以便对话框可检索对象,但是,在 selectedGuest 的 get/set 中使用跟踪器时,我没有看到使用上述代码片段调用的 setter。如果我删除inputText,那么即使hasSelected仍然返回 false,因此“新来宾”正在对话中,outputText充满了一个值。

我发现这篇很棒的文章讨论了有关操作、操作监听器等的执行顺序,但不认为这完全是我的问题:动作和动作监听器之间的区别 https://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener.

所以最终的问题是,当我只有一个输出文本时,为什么我的设置器会被命令按钮调用,但有了输入文本,我从来没有在日志中看到它被调用?

我很感谢您的时间和任何人都可以提供的帮助。


即使我们解决了你的问题,这个构造

<p:inputText value="#{guestList.hasSelected() ? '' : guestList.selectedGuest.name}">

永远不会起作用。它需要引用模型属性,而不是空字符串。

您最好只重用编辑表单并让创建按钮预先创建一个空实体。这会在视图方面简化很多。如果该实体有一个,那就更容易了@Id仅当其持久存在于数据库中时才存在的属性。

这是一个启动示例:

<h:form id="entitiesForm">
    <p:dataTable id="entitiesTable" value="#{bean.entities}" var="entity">
        <p:column>#{entity.foo}</p:column>
        <p:column>#{entity.bar}</p:column>
        <p:column>
            <p:commandButton id="edit" value="Edit" 
                process="@this" action="#{bean.edit(entity)}"
                update=":entityDialog" oncomplete="PF('entityDialog').show()" />
            <p:commandButton id="delete" value="Delete" 
                process="@this" action="#{bean.delete(entity)}"
                update=":entitiesForm:entitiesTable" />
        </p:column>
    </p:dataTable>
    <p:commandButton id="add" value="Add" 
        process="@this" action="#{bean.add}" 
        update=":entityDialog" oncomplete="PF('entityDialog').show()" />
</h:form>

<p:dialog id="entityDialog" widgetVar="entityDialog" 
    header="#{empty bean.entity.id ? 'New' : 'Edit'} entity">
    <h:form id="entityForm">
        <p:inputText id="foo" value="#{bean.entity.foo}" />
        <p:inputText id="bar" value="#{bean.entity.bar}" />
        <p:commandButton id="save" value="#{empty bean.entity.id ? 'Create' : 'Update'} entity" 
            process="@form" action="#{bean.save}"
            update=":entitiesForm:entitiesTable" oncomplete="PF('entityDialog').hide()" />
    </h:form>
</p:dialog>

有了这个@ViewScoped bean:

private List<Entity> entities; // +getter
private Entity entity; // +getter

@EJB
private EntityService entityService;

@PostConstruct
public void load() {
    entities = entityService.list();
    entity = null;
}

public void add() {
    entity = new Entity();
}

public void edit(Entity entity) {
    this.entity = entity;
}

public void save() {
    entityService.save(entity); // if (id==null) em.persist() else em.merge()
    load();
}

public void delete(Entity entity) {
    entityService.delete(entity); // em.remove(em.find(type, id))
    load();
}

也可以看看:

  • 为实体创建主从页面、如何链接它们以及选择哪个 bean 范围 https://stackoverflow.com/questions/8459903/creating-master-detail-pages-for-entities-how-to-link-them-and-which-bean-scope
  • 提交后发生验证错误时保持 p:dialog 打开 https://stackoverflow.com/questions/9195756/keep-pdialog-up-when-a-validation-error-occurs-after-submit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建主从表和对话框,如何重用相同的对话框来创建和编辑 的相关文章

  • 在显示另一个对话框之前隐藏所有可见的 Metro 对话框

    我在用着MahApps Metro http mahapps com在我的 WPF 项目中 我正在构建一个类来帮助我展示Dialogs http mahapps com controls dialogs html 我想知道是否有一种方法可以
  • 无法访问jsf组件中的javascript文件

    我有一个必须访问 javascript 文件的 jsf 组件 我添加了这个输出脚本 如下面的代码所示 我在生成的 html 中收到错误 并且无法访问 javascript javascript 文件位于 document root js 目
  • p:remoteCommand 无法在异步模式下工作

    如果有人可以在这里给我帮助 我将不胜感激 我在页面上有一个选项卡式布局 通过单击选项卡 p commandLink 我想初始化该选项卡的适当数据并更新显示内容的区域 由于我希望初始化能够延迟发生 当呈现选项卡内容时 因此我使用 Primef
  • 同时调用多个支持 bean 方法

    有没有办法从 JSF 中的不同支持 bean 调用多个方法 我有一个存储用户信息的应用程序 我有多个支持 bean 它们分为时间表 地址 电话等 当应用程序最初加载时 一切正常 但由于我的所有视图都是类型 ViewScope即使显示新用户
  • 通用 JSF 实体转换器[重复]

    这个问题在这里已经有答案了 我正在编写我的第一个 Java EE 6 Web 应用程序作为学习练习 我没有使用框架 只是使用 JPA 2 0 EJB 3 1 和 JSF 2 0 我有一个自定义转换器 用于将存储在 SelectOne 组件中
  • 向控制器发送参数

    我懂了
  • Win32 自定义绘制树视图控件

    我正在尝试使用 NM CUSTOMDRAW 消息自定义树视图控件 我只是想用灰色绘制所有其他可见的项目 这是绘制的代码 INT CResourceOutliner On WM NOTIFY HWND hDlg WPARAM wParam L
  • 无法在 JSF 应用程序中解析文档 faces-config.xml

    我正在开发一个 JSF Web 应用程序 我将 JSF 2 2 与 Apache Tomcat 8 0 27 0 结合使用 当我按 clean build 时 它工作正常 但是当我尝试运行我的应用程序时 我收到此异常 com sun fac
  • 从 ADF Faces JSF 1.2 中的托管 bean 构造函数导航

    是否可以从托管 bean 的构造函数导航到另一个页面 视图 如果发生任何异常 我希望进行此重定向 我尝试了很多方法 Try 1 getFacesContext responseComplete getFacesContext getAppl
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • 如何检测当前的 JSF 版本?

    我正在开发 jsf webapp 现在我需要知道我正在使用什么 JSF 版本 我在哪里可以查到这个 提前致谢 您的意思是 以编程方式 你可以从Package getImplementationVersion http docs oracle
  • WPF 模式进度窗口

    如果这个问题已经被回答了很多次 我很抱歉 但我似乎找不到适合我的答案 我想创建一个模式窗口 在我的应用程序执行长时间运行的任务时显示各种进度消息 这些任务在单独的线程上运行 我能够在过程的不同阶段更新进度窗口上的文本 跨线程通信一切正常 问
  • 托管 Bean 作为 Facelet 参数可让复合组件阻止解析

    在给定的情况下 我想使用具有不同 ManagedBeans 的 Facelet 因此相关的操作 bean 作为参数给出
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 自 Java EE 7 / EL 3.0 起不再工作

  • 中止来自 jsf.ajax.addOnEvent() 的 JSF Ajax 请求

    我希望有一个中心位置来监视 ajax 请求并在某些情况下中止它们 我唯一不知道要做的一件事就是实际中止来自一个中央函数的 ajax 请求 我想象解决方案看起来像这样 jsf ajax addOnEvent function data if
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • Activity 类型中的方法 showDialog(int) 在 Android 中已被弃用?

    方法showDialog int 从类型Activity is 已弃用 什么原因 以及如何解决 什么原因 http developer android com reference android app Activity html show
  • OpenFaces JSF 2 组件库

    有没有人尝试过开放面孔 3 http openfaces org并可以对以下内容进行简短评论 稳定 与其他库的兼容性 PrimeFaces RichFaces 等 使用方便 换肤功能 主题支持等 我正在寻找 JSF 2 组件库 我目前正在使

随机推荐

  • 如何迭代查询结果

    我正在用 pgsql 脚本语言创建一个函数 此时我想做的是迭代查询的结果 并为每一行执行特定的操作 我当前的尝试如下 其中temprow被声明为temprow user data users rowtype 有问题的代码如下 FOR tem
  • 显示与 main.cpp 不同的类

    我是qt新手 我有一个有多种表格的申请 我试图从 main cpp 中选择特定的表单 但它只是闪烁了表单 但我正在获取表单的调试值 并且表单是不可见的 我的main cpp代码 include dialog h include design
  • Pandas:将操作应用于多索引中的重复列

    我有 MultiColumns 第二级重复包含Job Openings and Hires 我想为每个顶级列减去一个 但我所做的一切都会让我陷入索引错误或切片错误 我怎样才能计算它 样本数据 gt gt gt df head Out 25
  • python中有序字典的有序字典

    我需要一个存储字典的字典数据结构 如下所示 custom 1 a np zeros 10 b np zeros 100 2 c np zeros 20 d np zeros 200 但问题是我在代码中多次迭代这个数据结构 每次迭代它时 我都
  • 无法获取用于gunicorn 的访问日志

    我在 nginx 后面运行 Gunicorn 我想将gunicorn 中的错误记录到gunicorn error log 并将访问日志记录到gunicorn access log 我的错误日志有效 但访问日志无效 我做错了什么 这是我的gu
  • Keras 准确率停留在 50%

    Code import numpy as np from keras preprocessing image import ImageDataGenerator from keras models import Sequential Mod
  • 如何调用类的析构函数?

    我有一个简单的 C 代码 但我不知道如何使用析构函数 class date public int day date int m day m date cout lt lt I wish you have entered the year n
  • setMaximumFractionDigits 的问题

    setMaximumFractionDigits 不适用于以下代码 NSString input 80 90 NSNumberFormatter numberFormatter NSNumberFormatter alloc init nu
  • 在傅立叶插值的上下文中返回函数的“传统”符号

    在数值分析中 我们学生有义务在 R 中实现代码 给定函数 f x 找到其傅立叶插值 tN x 并计算插值误差 f x t N x int 0 2 pi f x t N x 2 或各种不同的 N 我首先尝试根据以下公式计算 d 系数 d fr
  • C#:实时组合框更新

    我一直在尝试将文本文件加载到组合框中 然后创建一个按钮将我在组合框中所做的任何更改保存回文本文件 问题是 当我在组合框中输入某些内容时 所选的 项目 不会更新 我可以更改句子 但是一旦单击 保存 按钮 这也会更新组合框 它就会回到我编辑之前
  • 以 root 身份启动 Mysql

    我已经以 root 身份在我的测试服务器上启动了 mysql 我已经添加了 user root my cnf 中的行 由于我希望测试服务器升级到生产服务器 因此我想注释掉这一行并重新启动 有没有什么副作用 预期数据丢失 MySQL 的 ro
  • 出现错误:没有为一个或多个必需参数给出值

    下面是我的更新查询 它工作正常 但是当我添加时int DrId在参数字段 最后 检查条件条件 在此之后它向我显示以下错误 No value given for one or more required parameters 错误在哪里 因为
  • Node.js 在 openshift 中的部署

    我试图将 Node js 应用程序部署到 openshift 如此链接所示here http myapp jeewan rhcloud com 我理解这段代码 var http require http var server http cr
  • Sqlalchemy 如果表不存在

    我编写了一个模块 用于创建一个空数据库文件 def create database engine create engine sqlite myexample db echo True metadata MetaData engine me
  • 使用 RxJava 的状态机?

    我正在尝试全力以赴地使用 RxJava 并解决我遇到的这个问题 但它似乎非常不适合它 因为 RxJava 似乎不想处理任何类型的状态 而只是传递事件并改变它们来处理它们 我尝试用 RxJava 模拟的基本状态机行为是这样的 在应用程序启动事
  • 无法使用nodemailer发送html文本

    我无法使用 nodemailer 在邮件中发送 html 文本 exports send function req res console log req query var mailOptions to req query email s
  • 检查服务器上是否存在文件

    我正在尝试检查服务器上是否存在 ASP NET 网页后面带有 C 代码的文件 我知道该文件确实存在 因为我事先用一段代码将其放在服务器上 任何人都可以看到为什么找不到该文件 这是代码 wordDocName specifications C
  • Google Contacts API asp.net 设置和授权令牌

    是否有任何好的示例展示如何填写应用程序设置来创建请求设置 这是代码google https developers google com google apps contacts v3 using Google Contacts using
  • Python 中是否缓存了常量计算?

    假设我在 Python 中有一个函数 它使用一个常量计算的浮点值 如 1 3 def div by 3 x return x 1 3 如果我重复调用该函数 是否会自动缓存 1 3 的值以提高效率 或者我必须手动执行以下操作 def div
  • 创建主从表和对话框,如何重用相同的对话框来创建和编辑

    我正在尝试创建一个对话框 该对话框将用于创建对象和更新对象 因此 如果我碰巧单击 新建 按钮 我将看到一个包含要填充的空字段的对话框 或者如果我单击某个条目的编辑按钮 该条目的数据将显示在对话框中进行更新 按照 primefaces 展示版