JSF Setter方法在inputText表单中不起作用



我有下面的代码。当用户更改文本字段中的数据时(显示正确的信息,假设使用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";
}

有人知道为什么这个突然解决了这个问题吗?

相关内容

  • 没有找到相关文章

最新更新