делаю для пробы такую вещь таблица
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE `core_variables_categories` (
`ID_VARIABLE_CATEGORY` int ( 11 ) NOT NULL auto_increment,
`SYS_NAME_OF_VARIABLE` varchar( 100 ) default NULL ,
`FINE_NAME_OF_VARIABLE` varchar( 100 ) default NULL ,
PRIMARY KEY (`ID_VARIABLE_CATEGORY`),
UNIQUE KEY `SYS_NAME_OF_VARIABLE` (`SYS_NAME_OF_VARIABLE`),
KEY `FINE_NAME_OF_VARIABLE` (`FINE_NAME_OF_VARIABLE`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
для нее маппинг в гибернате:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
< class name="kolya.db.model.VariablesCategoryRow" table="core_variables_categories">
<id name="ID_VARIABLE_CATEGORY" type="integer" unsaved-value="null" >
<column name="ID_VARIABLE_CATEGORY" sql-type="int" not- null ="true"/>
<generator class ="native"/>
</id>
<property name="SYS_NAME_OF_VARIABLE" type="string">
<column name="SYS_NAME_OF_VARIABLE" not- null ="true"/>
</property>
<property name="FINE_NAME_OF_VARIABLE" type="string">
<column name="FINE_NAME_OF_VARIABLE" not- null ="true"/>
</property>
</ class >
</hibernate-mapping>
вот конфиг для faces
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<navigation-rule>
<description>
Simple navigation rule.
</description>
<from-view-id>/login.jsp</from-view-id>
<navigation- case >
<description>
Simple navigation case .
</description>
<from-outcome>ok_login</from-outcome>
<to-view-id>/index.jsp</to-view-id>
</navigation- case >
</navigation-rule>
<navigation-rule>
<description>
Simple navigation rule.
</description>
<from-view-id>/index.jsp</from-view-id>
<navigation- case >
<description>
Simple navigation case .
</description>
<from-outcome>manage_varibles_reference</from-outcome>
<to-view-id>/variables_types.jsp</to-view-id>
</navigation- case >
</navigation-rule>
<managed-bean>
<description>
Simple backing bean.
</description>
<managed-bean-name>alayerBean</managed-bean-name>
<managed-bean- class >kolya.db.ConnectionAbstractLayer</managed-bean- class >
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<description>
Simple backing bean.
</description>
<managed-bean-name>LoginBean</managed-bean-name>
<managed-bean- class >kolya.jsf.ipkmanager.Login</managed-bean- class >
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>alayer</property-name>
<property- class >kolya.db.ConnectionAbstractLayer</property- class >
<value>#{alayerBean}</value>
</managed-property>
</managed-bean>
<managed-bean>
<description>
Simple backing bean.
</description>
<managed-bean-name>dataVariablesList</managed-bean-name>
<managed-bean- class >kolya.db.model.VariablesCategoryQuery</managed-bean- class >
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>alayer</property-name>
<property- class >kolya.db.ConnectionAbstractLayer</property- class >
<value>#{alayerBean}</value>
</managed-property>
</managed-bean>
</faces-config>
как видно у меня два бина один для проверки доступа входа в систему и второй для вывода данных таблицы имеют одно общее свойство - бин хранящий в себе сессию к гибернату
теперь проблема, на странице которая выводит содержимое таблицы делаю так:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<head><title>Site Admin</title></head>
<body>
<f:view>
<h:form>
<h:dataTable value="#{dataVariablesList.query}" var="row">
<h:column>
<f:facet name="header">
<h:outputText value="Variable Cat ID" />
</f:facet>
<h:outputText value="#{row.ID_VARIABLE_CATEGORY}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Variable SYS(tem) Name" />
</f:facet>
<h:inputText size="30" value="#{row.SYS_NAME_OF_VARIABLE}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Variable FINE Name" />
</f:facet>
<h:inputText size="40" value="#{row.FINE_NAME_OF_VARIABLE}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Check If Delete" />
</f:facet>
<h:selectBooleanCheckbox value="#{row.MUSTBE_DELETED}"/>
</h:column>
</h:dataTable>
<h:commandButton value="update records"
actionListener="#{dataVariablesList.saveDataAction}"
/>
<h:commandButton id="btnUpdate" value="Change Data" actionListener="#{dataVariablesList.saveDataAction2}"/>
</h:form>
</f:view>
</body>
</html>
теперь надо сделать обработчик события для изменения данных, делаю в составе класса привязанного к бину dataVariablesList так:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
package kolya.db.model;
import kolya.db.ConnectionAbstractLayer;
import org.hibernate.Query;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import java.util.List;
import java.util.Iterator;
import java.awt.event.ActionEvent;
import javax.faces.*;
import javax.faces.component.html.*;
import javax.faces.event.*;
public class VariablesCategoryQuery {
public ConnectionAbstractLayer alayer;
public ConnectionAbstractLayer getAlayer() {
return alayer;
}
public void setAlayer(ConnectionAbstractLayer alayer) {
this .alayer = alayer;
}
List m_rows = null ;
public List getQuery() {
if (alayer == null )
System.err.println ("alayer is null");
else
if (alayer.getSession() == null )
System.err.println ("alayer session is null");
try {
Query q = alayer.getSession().createQuery("FROM kolya.db.model.VariablesCategoryRow AS g");
List list = q.list();
m_rows = list;
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Object o = iterator.next();
VariablesCategoryRow row = (VariablesCategoryRow) o;
row.setMasterRowCategory ( this );
}
return list;
} catch (HibernateException e) {
e.printStackTrace();
}
return null ;
}
public String SaveData (){
System.out.println("SaveData");
ConnectionAbstractLayer alayer = getAlayer();
Session session = alayer.getSession();
for (Iterator iterator = m_rows.iterator(); iterator.hasNext();) {
Object o = iterator.next();
VariablesCategoryRow row = (VariablesCategoryRow) o;
session.update(row);
System.out.println("save: " + row.getFINE_NAME_OF_VARIABLE());
}
return null ;
}
public void saveDataAction (ActionEvent aev){
System.out.println("Save Data");
SaveData();
}
}
фишка в том что saveDataAction - не вызывается, для эксперимента пробовал
делать ссылку на несуществующие имена методов. ноль реакции. томкат исключений тоже не выдает. пробовал давать ссылку через <h:commandButton action="#{dataVariablesList.SaveData}" /> аналогично.
* общий вопрос плоха ли данная методика.
* глюки с русскими буквами -- они отображаются нормально но в коде html кодируюется через #код
* это у меня или только у всех после примерно 20 итераций: перекомпиляции и переразвертывания приложения, томкат дохнет с мессджем нехватка памяти, в диспетчере задач выбрано примерно полторы сотни. плюс каждая обработка запроса занимают порядка 6-10 секунд -> duron1300 + 512mb.