我有下面的代码。当用户更改文本字段中的数据时(显示正确的信息,假设使用getName、getAddress方法等),然后点击保存按钮,用户将被带回到mainPage。如果我点击"编辑/查看个人……",它再次重新加载editpersonal.xhtml页面,原始值就在那里,而不是更改后的值。我已经检查了在chrome中发送的标题,它们正在发送,因此无论出于何种原因,它们都没有被设置。每个字段都有一个get和set方法。
我有几乎相同的代码在其他页面,我使用inputText字段设置信息,它的工作没有问题。我不知道为什么这不起作用。
mainPage.xhtml(此网页上的所有函数和命令都有效)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
<head>
<title>TODO supply a title</title>
</head>
<body>
<c:set var="userid" value="${CustomBuild.userid}"/>
#{CustomBuild.getCustomerDetails(userid)}
<c:set var="configs" value="#{CustomBuild.configs}"/>
Welcome <h:outputText escape="false" value="#{CustomBuild.name}"/>
<br></br>
Please choose from one of the following options below.
<br></br><br></br>
<h:form>
<h:commandButton id="editp" value="View/Edit Personal Information" action="editpersonal" />
<br></br><br></br>
<c:choose>
<c:when test="#{configs==0}">
<h:commandButton id="viewo" value="View Orders" action="vieworders" disabled="true"/>
</c:when>
<c:when test="#{configs!=0}">
<h:commandButton id="viewo" value="View Orders" action="vieworders" disabled="false"/>
</c:when>
</c:choose>
<br></br><br></br>
<h:commandButton id="createo" value="Create New Order" action="createorder" />
</h:form>
</body>
</html>
editpersonal.xhtml <——这个页面似乎没有在"保存"数据。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
<title>TODO supply a title</title>
</head>
<body>
<h:form>
<h:panelGrid>
<h:outputLabel value="Name: " style="font-weight:bold" />
<h:inputText value="#{CustomBuild.name}" />
<br></br>
<h:outputLabel value="Address " style="font-weight:bold" />
<h:inputText value="#{CustomBuild.address}" />
<br></br>
<h:outputLabel value="Phone Number: " style="font-weight:bold" />
<h:inputText value="#{CustomBuild.phone}" />
<br></br>
<h:outputLabel value="Email Address: " style="font-weight:bold" />
<h:inputText value="#{CustomBuild.email}" />
<br></br>
</h:panelGrid>
<h:commandButton id="Save" value="save" action="mainPage" />
</h:form>
<h:form>
<h:commandButton id="Cancel" value="cancel" action="mainPage" />
</h:form>
</body>
</html>
所以我决定尝试一下。我的计划是在点击保存按钮时运行保存到数据库的功能。
有意义,对吧?
函数如下。基本上,它所做的是获取新数据(我知道它正在保存,因为我通过调试器进行了检查)并将其保存回数据库。我的计划是在加载mainPage和edit页面时从数据库中获取新数据。
这绝对可以工作。
然而,我发现在编写和测试saveDetails函数之后,inputFields中的数据已经被更新和显示。所以这是解决方案,我猜,但我不知道为什么它突然工作,没有之前,因为没有在这个函数应该影响保存在bean中的数据。
基本上,下一步应该是编写另一个函数,从数据库中获取新数据,并用它填充bean数据,以便它始终显示最新的数据,但在我甚至可以这样做之前,输入字段开始正确更新。public String saveDetails() {
try {
int tempUserId = getUserid();
String stringUserId = Integer.toString(tempUserId);
String tempName = getName();
String tempAddress = getAddress();
String tempPhone = getPhone();
String tempEmail = getEmail();
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/TMA3C", "owner", "jsfdb");
Statement stmt = con.createStatement();
String query = "UPDATE APP.USERS SET FULLNAME = '" + tempName + "', ADDRESS = '" + tempAddress + "', PHONENUMBER = '" + tempPhone + "', "
+ "EMAIL = '" + tempEmail + "' WHERE USERID = " + stringUserId;
System.out.println(query);
stmt.executeUpdate(query);
} catch (ClassNotFoundException ex) {
Logger.getLogger(CustomBuild.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(CustomBuild.class.getName()).log(Level.SEVERE, null, ex);
}
return "mainPage";
}
有人知道为什么这个突然解决了这个问题吗?