2012-03-15 3 views
0

데이터베이스 테이블에 값을 삽입/업데이트 할 수있는이 양식이 있습니다.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.setting['SessionTTL']}"> 
           <f:selectItem itemValue="#{ApplicationController.setting['SessionTTL']}" itemLabel="#{ApplicationController.setting['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.setting['SessionTTL']}" rendered="#{ApplicationController.setting['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> 

setter 메소드를 사용하여 관리 빈에 값을 보내고 sql 쿼리를 사용하여 데이터베이스에 값을 삽입 할 수 있다는 것을 알고 있습니다. 예를 들어 40 개의 값을 가지고 각각에 대해 setter 메서드를 작성해야한다면 어떻게 될까요? JSF 페이지의 많은 값을 데이터베이스 테이블에 삽입하는 다른 빠른 솔루션이 있습니까?

최고의 소원 피터

UPDATE 여기

지금까지 내가했던 그 코드 :

은 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> 

관리 Bean :

package com.DX_57.SM_57; 
/* include default packages for Beans */ 
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;  
    private HashMap<String, String> updatedSettingsMap = 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;   
    } 

    /* Hash Map 
    * Returned from the JSF page with the updated settings 
    */ 
    public HashMap<String, String> setsettings(){ 
     return updatedSettingsMap; 
    } 

    /* 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 String UpdateDBSettings(String userToCheck) throws SQLException { 


     //here the values from the updatedSettingsMap will be inserted into the database 

      String storedPassword = null;   
      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 where sessionttl = ?"; 

         PreparedStatement updateQuery = conn.prepareStatement(SQL_Statement); 
         updateQuery.setString(1, userToCheck); 

         ResultSet result = updateQuery.executeQuery(); 

         if(result.next()){ 
          storedPassword = result.getString("Passwd"); 
         } 

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

       } 

     return storedPassword;  
     }  


} 

이 코드가 정확하고 효과가 있다고 가정합니다.

답변

3

문제는 없습니다. 이미 가지고 계신 것처럼 Map에 보관하십시오. 그러면 getter가 하나만 있으면됩니다. JSF는 이미 Map에 업데이트 된 값을 설정합니다. service.update(settings)으로 전화하면됩니다.


업데이트 : 요청에 따라, 그냥 다음과 비슷한 모습이 될 것입니다

@ManagedBean 
@ViewScoped 
public class Admin { 

    private Map<String, String> settings; 

    @EJB 
    private SettingsService service; 

    @PostConstruct 
    public void init() { 
     settings = service.getAll(); 
    } 

    public void save() { 
     service.update(settings); 
    } 

    public Map<String, String> getSettings() { 
     return settings; 
    } 

} 

<h:form> 
    <h:inputSomething value="#{admin.settings['key1']}" ... /> 
    <h:inputSomething value="#{admin.settings['key2']}" ... /> 
    <h:inputSomething value="#{admin.settings['key3']}" ... /> 
    <h:inputSomething value="#{admin.settings['key4']}" ... /> 
    <h:inputSomething value="#{admin.settings['key5']}" ... /> 
    ... 
    <h:commandButton value="Save" action="#{admin.save}" /> 
</h:form> 

와 당신이 하지settings에 대한 세터가 필요합니다. JSF는 Map 자신의 put() 메소드를 사용하여 제출 된 값으로 맵을 업데이트합니다. 동일한도 어떤 예 있는가 등 세터 만 String, Integer 등 단순한 속성이라고 배열 또는 모음 또는 Object[] 같은 중첩 콩 List<E>, SomeBean 등을 참조하는 다른 복잡한 속성

+0

적용 이것이 어떻게 구현 될 수 있는가? –

+0

죄송합니다. 불확실한 점이 확실하지 않습니다. bean의 프로퍼티로서 이미'settings' 맵을 가지고 있습니다. 입력 필드에 바인딩했습니다. JSF는 여기에 제출 된 값을 설정합니다. 아주 똑같은'settings' 맵을 DB에 유지하면됩니다. 나는 기본적인 예제로 답을 갱신했다. – BalusC

+0

예를 들어 주셔서 감사합니다. 게시물을 업데이트 한 직후 귀하의 예를 보았습니다. –

관련 문제