Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF-无法显示HashMap中的数据_Java_Jsf - Fatal编程技术网

Java JSF-无法显示HashMap中的数据

Java JSF-无法显示HashMap中的数据,java,jsf,Java,Jsf,我有这个JSF页面: <div id="settingsdiv" style="width:350px; height:400px; position:absolute; background-color:r; top:20px; left:1px"> <h:form> <h:panelGrid columns="2"> <h

我有这个JSF页面:

<div id="settingsdiv" style="width:350px; height:400px; position:absolute;  background-color:r; top:20px; left:1px">
                    <h:form>
                    <h:panelGrid columns="2">
                        <h:panelGroup>User Session Timeout</h:panelGroup>
                        <h:panelGroup>
                            <h:selectOneMenu value="#{ApplicationController.settings['SessionTTL']}">
                                <f:selectItem itemValue="#{ApplicationController.settings['SessionTTL']}" itemLabel="#{ApplicationController.settings['SessionTTL']}" />
                                <f:selectItem itemValue="two" itemLabel="Option two" />
                                <f:selectItem itemValue="three" itemLabel="Option three" />
                                <f:selectItem itemValue="custom" itemLabel="Define custom value" />
                                <f:ajax render="input" />
                            </h:selectOneMenu>
                            <h:panelGroup id="input">
                                <h:inputText value="#{ApplicationController.settings['SessionTTL']}" rendered="#{ApplicationController.settings['SessionTTL'] == 'custom'}" required="true" />
                            </h:panelGroup>

                        </h:panelGroup>

                        <h:panelGroup>Maximum allowed users</h:panelGroup>
                        <h:panelGroup></h:panelGroup>                                                                     
                    </h:panelGrid>                         
                        <h:commandButton value="Submit" action="#{ApplicationController.updateDBSettings()}"/>
                    </h:form> 

                </div>  
这个豆子:

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
// or import javax.faces.bean.SessionScoped;
import javax.inject.Named;
/* include SQL Packages */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
// or import javax.faces.bean.ManagedBean;   

import org.glassfish.osgicdi.OSGiService;

@Named("ApplicationController")
@SessionScoped
public class Application implements Serializable {

    /* This Hash Map will be used to store setting and value */
    private HashMap<String, String> settingsMap = null;    

    public Application(){     
    }   

    /* Call the Oracle JDBC Connection driver */
    @Resource(name = "jdbc/Oracle")
    private DataSource ds;


    /* Hash Map
     * Send this hash map with the settings and values to the JSF page
     */
    public HashMap<String, String> getsettings(){
        return settingsMap;        
    }

    /* Get a Hash Map with settings and values. The table is genarated right 
     * after the constructor is initialized. 
     */
    @PostConstruct
    public void initSettings() throws SQLException
    {        
        settingsMap = new HashMap<String, String>();

        if(ds == null) {
                throw new SQLException("Can't get data source");
        }
        /* Initialize a connection to Oracle */
        Connection conn = ds.getConnection(); 

        if(conn == null) {
                throw new SQLException("Can't get database connection");
        }
        /* With SQL statement get all settings and values */
        PreparedStatement ps = conn.prepareStatement("SELECT * from GLOBALSETTINGS");

        try
        {
            //get data from database        
            ResultSet result = ps.executeQuery();
            while (result.next())
            {
               settingsMap.put(result.getString("SettingName"), result.getString("SettingValue"));
            }            
        }
        finally
        {
            ps.close();
            conn.close();         
        }        
    }

    /* Update Settings Values */
    public void updateDBSettings() throws SQLException {

            String SQL_Statement = null;

            if (ds == null) throw new SQLException();      
       Connection conn = ds.getConnection();
            if (conn == null) throw new SQLException();      

       try {
            conn.setAutoCommit(false);
            boolean committed = false;
                try {
                       SQL_Statement = "UPDATE GLOBALSETTINGS " +
                                            "SET \"SettingValue\" = " +
                                              "CASE " +
                                                "WHEN \"SettingName\" = 'SessionTTL' THEN ? " +
                                                "WHEN \"SettingName\" = 'MaxUsersActive' THEN ? " +
                                              "END " +
                                       "WHERE \"SettingName\"  IN ('SessionTTL', 'MaxUsersActive')";


                       PreparedStatement updateQuery = conn.prepareStatement(SQL_Statement);
                       updateQuery.setString(1, settingsMap.get("SessionTTL"));
                       updateQuery.setString(2, settingsMap.get("MaxUsersActive"));

                       updateQuery.executeQuery();

                       conn.commit();
                       committed = true;
                 } finally {
                       if (!committed) conn.rollback();
                       }
            }
                finally {               
                conn.close();

                }  

       }    


}
当我尝试在输入字段中输入一些数据并单击submit按钮时,当我重新加载JSF页面时,在字段中看不到任何数据。通过SQL developer,我可以看到数据库表中的数据已更新。你发现代码中有什么问题吗

祝福
彼得

如果你创建了一个方法呢

public void setMapValue(String value) {
    settingsMap.put("SessionTTL", value);
}
并在xhtml页面中使用:

<h:inputText value="#{ApplicationController.mapValue}" />