데이터베이스 테이블에 값을 삽입/업데이트 할 수있는이 양식이 있습니다.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;
}
}
이 코드가 정확하고 효과가 있다고 가정합니다.
적용 이것이 어떻게 구현 될 수 있는가? –
죄송합니다. 불확실한 점이 확실하지 않습니다. bean의 프로퍼티로서 이미'settings' 맵을 가지고 있습니다. 입력 필드에 바인딩했습니다. JSF는 여기에 제출 된 값을 설정합니다. 아주 똑같은'settings' 맵을 DB에 유지하면됩니다. 나는 기본적인 예제로 답을 갱신했다. – BalusC
예를 들어 주셔서 감사합니다. 게시물을 업데이트 한 직후 귀하의 예를 보았습니다. –