我遇到了问题:
这是我的TesztBean.java:
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.LazyDataModel;
@ManagedBean
@SessionScoped
public class TesztBean implements Serializable{
String URL = "jdbc:mysql://localhost:3306/osszesito?useUnicode=yes&characterEncoding=UTF-8";
String USER = "USER";
String PASSWORD = "PASSWD";
String DRIVER = "com.mysql.jdbc.Driver";
private List<TesztSetGet> filteredOsszesito;
private List<TesztSetGet> values;
private TesztSetGet select;
public TesztSetGet getSelect() {
return select;
}
public void setSelect(TesztSetGet select) {
this.select = select;
}
@PostConstruct
public void init() {
try {
values = selectTesztTable();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getDBConnection() {
Connection dbConnection = null;
try {
Class.forName(DRIVER);
dbConnection= DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("Connection completed.");
} catch (SQLException e) {
System.out.println(e.getMessage());
}catch(ClassNotFoundException cnfe){
cnfe.printStackTrace();
System.out.println(cnfe.getMessage());
System.exit(-1);
}
return dbConnection;
}
public List<TesztSetGet> selectTesztTable() throws SQLException{
ResultSet rs = null;
PreparedStatement pst = null;
Connection con = getDBConnection();
String stm = "select * from teszt order by age";
List<TesztSetGet> records = new ArrayList<TesztSetGet>();
try {
pst = con.prepareStatement(stm);
pst.execute();
rs = pst.getResultSet();
while(rs.next()){
TesztSetGet objectMeghiv = new TesztSetGet();
objectMeghiv.setId(rs.getInt(1));
objectMeghiv.setName(rs.getString(2));
objectMeghiv.setAge(rs.getInt(3));
objectMeghiv.setKapcsolatfelvetel_megtortent(rs.getString(4));
objectMeghiv.setLevelkuldesenek_datuma(rs.getString(5));
objectMeghiv.setKepzes_kezdete(rs.getString(6));
objectMeghiv.setKepzes_vege(rs.getString(7));
objectMeghiv.setMagyarazat(rs.getString(8));
records.add(objectMeghiv);
}
return records;
}catch (SQLException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally{
rs.close();
pst.close();
con.close();
}
return records;
}
public List<TesztSetGet> getValues() {
return values;
}
public void update(RowEditEvent event) {
TesztSetGet edittedObject = (TesztSetGet) event.getObject();
Connection connection = null;
PreparedStatement pst = null;
ResultSet rs = null;
String sql = "update teszt set kapcsolatfelvetel_megtortent=?, levelkuldes_datuma=?, kepzes_kezdete=?, kepzes_vege=?, megjegyzes=? where id=?";
try{
connection = getDBConnection();
pst = connection.prepareStatement(sql);
pst.setString(1, edittedObject.getKapcsolatfelvetel_megtortent());
pst.setString(2, edittedObject.getLevelkuldesenek_datuma());
pst.setString(3, edittedObject.getKepzes_kezdete());
pst.setString(4, edittedObject.getKepzes_vege());
pst.setString(5, edittedObject.getMagyarazat());
pst.setInt(6, edittedObject.getId());
pst.executeUpdate();
pst.close();
connection.close();
}catch(SQLException se){
se.printStackTrace();
se.getMessage();
}catch(Exception e){
e.printStackTrace();
e.getMessage();
}
}
public List<TesztSetGet> getFilteredOsszesito() {
return filteredOsszesito;
}
public void setFilteredOsszesito(List<TesztSetGet> filteredOsszesito) {
this.filteredOsszesito = filteredOsszesito;
}
}
这是我的TesztSetGet.java:
public class TesztSetGet {
private int id;
private String name;
private int age;
private String kapcsolatfelvetel_megtortent;
private String levelkuldesenek_datuma;
private String kepzes_kezdete;
private String kepzes_vege;
private String magyarazat;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getKapcsolatfelvetel_megtortent() {
return kapcsolatfelvetel_megtortent;
}
public void setKapcsolatfelvetel_megtortent(String kapcsolatfelvetel_megtortent) {
this.kapcsolatfelvetel_megtortent = kapcsolatfelvetel_megtortent;
}
public String getLevelkuldesenek_datuma() {
return levelkuldesenek_datuma;
}
public void setLevelkuldesenek_datuma(String levelkuldesenek_datuma) {
this.levelkuldesenek_datuma = levelkuldesenek_datuma;
}
public String getKepzes_kezdete() {
return kepzes_kezdete;
}
public void setKepzes_kezdete(String kepzes_kezdete) {
this.kepzes_kezdete = kepzes_kezdete;
}
public String getKepzes_vege() {
return kepzes_vege;
}
public void setKepzes_vege(String kepzes_vege) {
this.kepzes_vege = kepzes_vege;
}
public String getMagyarazat() {
return magyarazat;
}
public void setMagyarazat(String magyarazat) {
this.magyarazat = magyarazat;
}
}
这是我的jsf页面:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
>
<h:head>
<title>Teszt</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="style.css"/>
</h:head>
<ui:debug />
<h:form id="form">
<p:fieldset legend="Teszt:">
<p:dataTable id="dataTableTeszt" value="#{TesztBean.values}" var="c" paginator="true" rows="25" editable="true" filteredValue="#{TesztBeanBean.filteredOsszesito}" scrollable="true" scrollWidth="1500" scrollHeight="550"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
paginatorPosition="bottom" rowsPerPageTemplate="5,10,15,20,30,40,50">
<p:column style="width: 60px; text-align: center" headerText="Show">
<p:commandButton id="addCategoryButton" value="Show" onclick="categoryDialog.show();" action="#{TesztBean.values}" update=":form:grid"/>
</p:column>
<p:column style="width: 130px; text-align: center" filterBy="#{c.id}" filterMatchMode="contains">
<f:facet name="header">ID:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.id}" style="width: 130px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.id}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 130px; text-align: center" filterBy="#{c.name}" filterMatchMode="contains">
<f:facet name="header">Name:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.name}" style="width: 130px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.name}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 130px; text-align: center" filterBy="#{c.age}" filterMatchMode="contains" >
<f:facet name="header">Age:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.age}" style="width: 130px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.age}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 230px; text-align: center" filterBy="#{c.kapcsolatfelvetel_megtortent}" filterMatchMode="contains" >
<f:facet name="header">Kapcsolatfelvétel megtörtént:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.kapcsolatfelvetel_megtortent}" style="width: 230px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.kapcsolatfelvetel_megtortent}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 230px; text-align: center" filterBy="#{c.levelkuldesenek_datuma}" filterMatchMode="contains" >
<f:facet name="header">Levélküldés dátuma:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.levelkuldesenek_datuma}" style="width: 230px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.levelkuldesenek_datuma}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 230px; text-align: center" filterBy="#{c.kepzes_kezdete}" filterMatchMode="contains" >
<f:facet name="header">Képzés kezdete:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.kepzes_kezdete}" style="width: 230px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.kepzes_kezdete}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 230px; text-align: center" filterBy="#{c.kepzes_vege}" filterMatchMode="contains" >
<f:facet name="header">Képzés vege:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.kepzes_vege}" style="width: 230px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.kepzes_vege}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column style="width: 1000px; text-align: center" filterBy="#{c.magyarazat}" filterMatchMode="contains">
<f:facet name="header">Megjegyzés:</f:facet>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{c.magyarazat}" style="width: 1000px; text-align: center"/>
</f:facet>
<f:facet name="input">
<p:inputText value="#{c.magyarazat}"/>
</f:facet>
</p:cellEditor>
</p:column>
</p:dataTable>
</p:fieldset>
<p:dialog id="categoryDialog" header="Category Detail" widgetVar="categoryDialog" closeOnEscape="true" resizable="false" style="width:1000px; height: 500px;" showEffect="explode" hideEffect="bounce">
<h:panelGrid id="grid" columns="2">
<h:outputText value="ID:"/>
<h:outputText value="#{TesztBean.select.id}"/>
<h:outputText value="Age:"/>
<h:outputText value="#{TesztBean.select.age}"/>
<h:outputText value="Kapcsolatfelvetel megtortent:"/>
<h:outputText value="#{TesztBean.select.kapcsolatfelvetel_megtortent}"/>
</h:panelGrid>
</p:dialog>
</h:form>
</html>
在这张图片中,您可以看到我的问题:
如果单击“显示”按钮,则在弹出窗口中没有值,为什么?
非常感谢,
***************UPDATE***************
修改:
JSf页面:
<p:column style="width: 60px; text-align: center" headerText="Edit">
<p:commandButton id="addCategoryButton" value="Show" oncomplete="categoryDialog.show();" update=":form:grid :form:categoryDialog" actionListener="#{TesztBean.select(c)}"/>
</p:column>
TEsztBean.java:
private TesztSetGet select;
public TesztSetGet getSelect() {
return select;
}
public void setSelect(TesztSetGet value) {
this.select = value;
}
我在服务器中看到有例外情况:
调用操作时收到'javax.el.MethodNotFoundException' 组件'addCategoryButton'|#]的监听器'#{TesztBean.select(c)}' [#| 2014-05-15T16:24:30.443 + 0200 |严重|甲骨文glassfish3.1.2 | javax.faces.event | _ThreadID = 75; _ThreadName =螺纹-2; | javax.el.MethodNotFoundException: 方法选择未找到
[#| 2014-05-15T16:24:30.444 + 0200 |严重|甲骨文glassfish3.1.2 | javax.enterprise.resource.webcontainer.jsf.context | _ThreadID = 75; _ThreadName =线程2; | JSF1073 : 处理期间捕获的javax.faces.event.AbortProcessingException INVOKE_APPLICATION 5:UIComponent-ClientId = form:dataTableTeszt, 消息=方法选择未找到|#]
[#| 2014-05-15T16:24:30.444 + 0200 |严重|甲骨文glassfish3.1.2 | javax.enterprise.resource.webcontainer.jsf.context | _ThreadID = 75; _ThreadName =线程2; |方法 选择未找到
答案 0 :(得分:3)
你有两个问题,首先你在哪里将所选项目发送到你的bean?他们有很多方法可以做到这一点。
您可以使用RowSelection将这两个属性添加到数据表:
selection="#{TesztBean.values}" selectionMode="single"
或修改您的命令按钮并添加如下的actionListener:
actionListener="#{TesztBean.selectForDialog(c)}" />
在你的bean里面添加:
public void selectForDialog(TesztSetGet value){
this.select = value;
}
你的第二个问题是你没有更新你的对话框,他显示得很好但是空的,因为他没有刷新,具有正确的值。
<p:commandButton id="addCategoryButton" value="Show" oncomplete="categoryDialog.show();" actionListener="#{TesztBean.selectForDialog(c)}" update=":form:grid :form:categoryDialog"/>
在设置数据之前,使用oncomplete
代替onclick
或打开对话框。