【发布时间】:2015-02-09 22:25:34
【问题描述】:
我尝试了四天将值从我的 (xadmin.xhtml) 传递给我的 (JadminBeans.java) 但到目前为止没有运气。我想要做的是当我使用数据表按下一行内的删除按钮时,该行内的所有数据都应该从我的数据表和mysql数据库中删除。所以这是我的代码的一部分: P.s:我是 java EE 和 jsf 的新手
xadmin.xhtml
<h:dataTable value="#{Jadmin.messages}" var="o"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row"
>
<h:column>
<f:facet name="header">username</f:facet>
#{o.username}
</h:column>
<h:column>
<f:facet name="header">password</f:facet>
#{o.password}
</h:column>
<h:column>
<f:facet name="header">permission</f:facet>
#{o.permission}
</h:column>
<h:column>
<f:facet name="header">delete</f:facet>
<h:commandLink value="Delete" action="#{Jadmin.delete(o.username)}" />
</h:column>
</h:dataTable>
JadminBeans.java
@ManagedBean(name = "Jadmin")
@SessionScoped
public class JadminBeans {
private String username, password, permission;
private JadminController JaC;
// insert getter setter here
public List<JadminBeans> getMessages() {
return JadminDAO.getAllUsers();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public void delete(String usr) {
System.out.println("JadminBeans >> delete() ---------- username= "+usr);
JadminDAO.deleteUser(usr);
}
}
JadminDAO.java
public static List<JadminBeans> getAllUsers() {
List<JadminBeans> users = new ArrayList<JadminBeans>();
try {
Connection con = DBconnection.getConnection();
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("select * from users");
while (rs.next()) {
JadminBeans user = new JadminBeans();
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setPermission(rs.getString("permission"));
System.out.println("JadminDAO > getAllUsers(): "+rs.getString("username"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
public static void deleteUser(String id) {
try {
PreparedStatement preparedStatement = connection.prepareStatement("delete from users where username=?");
// Parameters start with 1
preparedStatement.setString(1, id);
preparedStatement.executeUpdate();
System.out.println("JadminDAO >> deleteUser ----------"+ id);
} catch (SQLException e) {
System.out.println("JadminDAO >> deleteUser----------- SQLException :(");
e.printStackTrace();
}
}
【问题讨论】:
-
是
usr在delete()方法中为空,还是没有从数据库中删除的问题?解释一下它是如何不起作用的,有什么例外吗? -
嗨@PredragMaric 问题是 usr 是空的。这意味着我的 xhtml 文件将一个空值传递给我的 java 文件
-
尝试将
action="#{Jadmin.delete(o.username)}"更改为actionListener="#{Jadmin.delete(o.username)}",或者从delete()返回字符串而不是void(action属性应该解析为字符串)。 -
我使用 actionListener="#{Jadmin.delete(o.username)}" 完成了您告诉我的操作,但出现此错误(找不到方法:class admin_page.JadminBeans.delete(java. lang.String))
-
第二个建议根本不起作用,但感谢@PredragMaric :)
标签: mysql jsf jakarta-ee primefaces datatable