我有以下代码。当用户更改文本字段中的数据时(显示正确的信息,可以使用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&lt; - 此页面似乎没有“保存”数据。
<?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>
答案 0 :(得分:0)
所以我决定尝试一下。我的计划是在点击保存按钮时运行保存到数据库功能。
有道理吗?
功能如下。基本上做的是获取新数据(我知道因为我检查了调试器而保存了它)并将其保存回数据库。我的计划是在加载主页面和编辑页面时从数据库中获取新数据。
这绝对有效。
然而,我发现在编写和测试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";
}
有谁知道为什么这突然解决了这个问题?