JSF Setter方法不能在inputText表单中工作

时间:2014-06-05 01:39:13

标签: java html jsf primefaces facelets

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

1 个答案:

答案 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";
}

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