Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 区分插入和更新_Java_Jsf_Jdbc - Fatal编程技术网

Java 区分插入和更新

Java 区分插入和更新,java,jsf,jdbc,Java,Jsf,Jdbc,我有一个JSF页面,其中输入字段和值被保存到数据库中 我想做插入和更新。 区分插入和更新的最佳方法是什么,我不想使用flag。 我的意思是,如果标志是“I”,那么insert else标志是“U”,然后更新 最好像若ID不为null,那个么调用insert方法;若ID为null,那个么调用update方法。ID是我的主键,它是自动生成的 我使用的是JSF1.1,数据库是Oracle10g。您可以这样做。。。。 you can do like this.... <h:commandB

我有一个JSF页面,其中输入字段和值被保存到数据库中

我想做插入和更新。 区分插入和更新的最佳方法是什么,我不想使用flag。 我的意思是,如果标志是“I”,那么insert else标志是“U”,然后更新

最好像若ID不为null,那个么调用insert方法;若ID为null,那个么调用update方法。ID是我的主键,它是自动生成的

我使用的是JSF1.1,数据库是Oracle10g。

您可以这样做。。。。
you can do  like this....



<h:commandButton value="Update" action="#{bean.updateAction}"
                                                         rendered="#{bean.ID eq ''}"/>
      <h:commandButton value="Add" action="#{bean.saveAction}" 
                                                         rendered="#{bean.ID ne ''}">

    where id is an attribute in your backing bean initiated with empty string.        
其中id是用空字符串启动的支持bean中的一个属性。
由于您没有发布任何代码,而且您对应用程序的描述对我也没有任何帮助,因此我只能建议使用一个隐藏的表单字段,该字段包含最终使用标记呈现的标志。当然,没有什么可以阻止任何人在回发时将标志的值从U更改为I。毕竟,这是JSF1.1,没有视图范围的概念


但是,您可以使用会话范围来存储值,而不是隐藏的表单字段,但是当您不再需要这些值时,您必须清除它们。

这不是jsf的典型问题,而是一个标准的设计问题。我看到这是通过以下方式处理的

  • 获取id并调用select查询。如果查询返回任何结果,则执行更新,否则执行插入
  • 更新并检查受影响的行。如果为0,则插入。或者,插入并检查主键异常。如果引发异常,则更新
  • 如果数据库允许,请使用集成更新或插入。这可以在Oracle中使用
    merge
    关键字来完成
  • 使用旗帜,但那很难看
  • 始终执行逻辑删除和插入。当然,这是一个更大的设计决策,在具有非常严格的审核要求的应用程序中实现
    为什么首先需要区分?您没有用于插入和修改数据的不同JSF页面吗?@Vineet Reynolds所以有相同的JSF页面。区别的原因是我知道该调用哪种方法,是更新还是插入。否则我需要使用一个我希望避免的标志。但使用不同的插入和更新页面或两个不同的选项更可行,也更易于操作。不使用标志有什么具体原因吗?您使用什么来持久化数据?当使用JPA作为Java持久化API时,这是一个单行程序。
    来自PrimeFaces,不是吗?同样,问题是JSF1.1,而PrimeFaces需要JSF2.0。此外,JSF 1.1不支持Ajax,所以<代码> Ajax=“false”<代码>无效,如果我必须考虑标准标签库。如果它支持渲染属性,那么它就足够了,然后编辑您的答案使用JSF 1.1的标记库,或者解释使用已渲染的属性以及它如何被用来解决手头的问题。你目前的答案要求任何人都能读懂你的想法,知道代码试图做什么。正如波拉潘所说,id是主键,与everyrecord关联。为了编辑一条记录,你应该先选择它。在选择时,您必须在支持bean中填充id。无论如何,我还没有使用过1.1 jsf,所以我不清楚它。但是我已经用jsf2.0完成了类似的任务。在我的JSF页面中,我只有提交和取消按钮,因此我不能使用两个按钮,一个用于插入,一个用于更新。我会尝试第一个选项。第三点,你是说我在数据库中创建一个过程,然后检查更新或插入?