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メソッドを使用して管理対象Beanに値を送信し、SQLクエリを使用してデータベースに挿入することができることを知っています。例えば、私が40の値を持っていて、それぞれのためにセッターメソッドを書く必要がある場合はどうでしょうか? 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;
}
}
このコードは正しいと思われ、うまくいくはずです。
など、セッターのみ
String
、Integer
のような単純な性質のために呼ばれるなど、配列またはコレクションまたはObject[]
、List<E>
、SomeBean
のようなネストされたBeanを参照する他のすべての複雑なプロパティに適用される任意の例ありこれはどのように実装できますか? –申し訳ありませんが、私はあなたのために不明なものはわかりません。 beanのプロパティとして既に 'settings'マップがあります。入力フィールドにバインドしました。 JSFはそこに提出された値を設定します。まったく同じ 'settings'マップをDBに残すだけです。私は基本的な例で答えを更新しました。 – BalusC
ありがとうございます。私はポストを更新した直後にあなたの例を見ました。 –