数据库记录未更新,但java代码表示1行受影响(Primefaces)
我不熟悉数据库记录未更新,但java代码表示1行受影响(Primefaces),java,jakarta-ee,primefaces,jsf-2,Java,Jakarta Ee,Primefaces,Jsf 2,我不熟悉J2EE,我正在尝试执行Crud操作。但是我被困在更新方法中 我将EJB用于服务器(数据库)和jsf primefaces用于客户端 问题是,每当我点击editajaxevent时,它就会将我的行变为input text,这是正确的,之后当我编辑字段时,我会按ok更新行,但它不会 这就是我到目前为止所做的 xhtmlcode: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DT
J2EE
,我正在尝试执行Crud
操作。但是我被困在更新方法中
我将EJB
用于服务器(数据库)
和jsf primefaces
用于客户端
问题是,每当我点击editajaxevent
时,它就会将我的行变为input text
,这是正确的,之后当我编辑字段时,我会按ok
更新行,但它不会
这就是我到目前为止所做的
xhtml
code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xml:lang="en" lang="en"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>JSF 2.x Page</title>
<meta http-equiv="keywords" content="enter,your,keywords,here" />
<meta http-equiv="description"
content="A short description of this page." />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<!--<link rel="stylesheet" type="text/css" href="styles.css">-->
</h:head>
<h:body>
<h:form id="form">
<p:growl id="msgs" showDetail="true"/>
<p:dataTable id="rec1" var="item" value="#{first.list}" paginator="true" editable="true" style="width:550px;" >
<f:facet name="header">
Personal Record
</f:facet>
<p:ajax event="rowEdit" listener="#{first.onRowEdit}" update=":form:msgs" />
<p:ajax event="rowEditCancel" listener="#{first.onRowCancel}" update=":form:msgs" />
<p:column headerText="Id">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.id}" /></f:facet>
<f:facet name="input"><p:inputText id="modelInput" value="#{item.id}" style="width:100%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="First Name">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.fname}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.fname}" style="width:100%" label="First Names"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Last Name">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{item.lname}" /></f:facet>
<f:facet name="input"><p:inputText value="#{item.lname}" style="width:100%"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Delete">
<p:commandButton icon="ui-icon-close" title="Delete"
actionListener="#{first.removeUser(item)}" update="rec1" />
</p:column>
<p:column style="width:32px">
<p:rowEditor />
</p:column>
</p:dataTable>
<br/>
<br/>
<br/>
<p id="hello">
First Name:
<p:inputText value="#{first.fname}"></p:inputText>
<br /> Last Name:
<p:inputText value="#{first.lname}"></p:inputText>
<br />
<p:growl id="growl" life="5000" />
<p:commandButton value="Insert" update="rec1" action="#{first.add}"></p:commandButton>
<br /><h:messages id="test"></h:messages>
</p>
</h:form>
</h:body>
</html>
这是我的EJB
项目bean
文件,我在其中编写了所有查询
public void saveUser(int id, String fname, String lname) {
System.out.println("recieveing records: "+id+fname+lname);
String query = "UPDATE user SET fname='"+fname+"', lname='"+lname+"' where id= "+id;
//int output=em.createNativeQuery(query.executeUpdate()
注意:这个东西适用于update
,但我不想使用它
您听说过SQL注入吗?永远不要在查询字符串中添加用户可以修改的字符串!谢谢你的建议:)为什么你不想使用有效的方法?使用em是正确的方法,您正在避免使用它进行注入。因为,我想学习其他方法。看看这个:您可以找到一些保存方法(除了使用em之外)来更新您的数据库。您听说过SQL注入吗?永远不要在查询字符串中添加用户可以修改的字符串!谢谢你的建议:)为什么你不想使用有效的方法?使用em是正确的方法,您正在避免使用它进行注入。因为,我想学习其他方法。看看这个:您可以找到一些保存方法(除了使用em)来更新您的数据库。
public void saveUser(int id, String fname, String lname) {
System.out.println("recieveing records: "+id+fname+lname);
String query = "UPDATE user SET fname='"+fname+"', lname='"+lname+"' where id= "+id;
// User user= em.find(User.class, id);
// user.setFname(fname);
// user.setLname(lname);
// em.persist(user);
// em.merge(user);
System.out.println("outcome"+ outcome);
}
User user= em.find(User.class, id);
user.setFname(fname);
user.setLname(lname);
em.persist(user);
em.merge(user);