我有关于富面和豆子的问题。 我有一个使用richfaces的jsp页面,在其中我有:rich:extendedDatatable组件,它将我的MainBean中的数据作为ArrayList(这个bean查询mySQL并将结果放到稍后填充dataTable的ArrayList)。数据表中有4列,前3列是h:outputLabels,最后一列是复选框。现在我有一个问题:如何从选定的行中获取信息?我的意思是,当用户单击复选框时,我想获取id / name或与此特定行关联的任何内容,然后当用户单击Apply更改a4j:按钮时,我将更新数据库,当用户再次登录时,他将看更新的信息:例如现在选中/未选中复选框,因为用户选中了该复选框。 我相信对于使用它的人来说,这是一个简单的查询。对我而言。 flash开发人员在as3中很容易,但在这里我还没找到解决方案,请帮助。
更新:
让我解释并发布代码。当用户登录时,我对数据库进行查询,其中有2个表。第一个是“活动”(act_id,名称,描述,日期),第二个叫做“common”(在其中存储user_id和act_id)。我的想法是存储数据,告诉我,哪个用户被分配到每个活动。在这种情况下,例如id为1的用户正在使用活动1 2和3,而id为2的用户正在使用活动2和4,然后当从数据库查询返回结果时,我只需创建一个包含适当数据的ArrayList。所以当用户点击复选框,然后插入查询,当用户取消选中该复选框,然后删除查询到数据库(基于用户ID和act_id)这里是查询方法的代码,首先我必须得到user_id:
public String login() {
Statement stmt2 = null;
Statement stmt3 = null;
ResultSet rs = null;
ResultSet rs2 = null;
ResultSet rs3 = null;
String sql = "SELECT * from user";
String sql2 = "SELECT * from activities";
try {
conn = DriverManager.getConnection(jdbcUrl, user, pass);
stmt = conn.createStatement();
stmt2 = conn.createStatement();
boolean selected = true;
rs = stmt.executeQuery(sql);
rs2 = stmt2.executeQuery(sql2);
while(rs.next()) {
if (username != null && password != null) {
if (rs.getString("username").equals(username)
&& rs.getString("password").equals(password)) {
id = rs.getString("user_id");
stmt3 = conn.createStatement();
while(rs2.next()){
selected = false;
String aid = rs2.getString("act_id");
String name = rs2.getString("name");
String desc = rs2.getString("desc");
String date = rs2.getString("date");
String sql3 = "SELECT * from common where uid="+id+"";
rs3 = stmt3.executeQuery(sql3);
while(rs3.next()) {
if(rs3.getString("aid").equals(aid)){
activities.add(new Activity(name, desc, date, true));
selected = true;
}
}
if(!selected)
activities.add(new Activity(name, desc, date, false));
}
return "success";
}
}
}
}catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
}
}
return "failure";
}
丰富的面孔观点:
<a4j:form>
<rich:extendedDataTable id="activities" value="#{mainBean.activities}" var="acts" sortMode="single">
<rich:column label="Name" sortable="true" sortBy="#{acts.name}">
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputLabel value="#{acts.name}" />
</rich:column>
<rich:column label="Description" sortable="true" sortBy="#{acts.description}">
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputLabel value="#{acts.description}" />
</rich:column>
<rich:column label="Date" sortable="true" sortBy="#{acts.date}">
<f:facet name="header">
<h:outputText value="Date" />
</f:facet>
<h:outputLabel value="#{acts.date}" />
</rich:column>
<rich:column label="Selected" sortable="true" sortBy="#{acts.selected}">
<f:facet name="header">
<h:outputText value="Selected" />
</f:facet>
<h:selectBooleanCheckbox value="#{acts.selected}" />
</rich:column>
</rich:extendedDataTable>
<h:commandButton value="Apply changes" action="#{mainBean.addActivity}" />
</a4j:form>
答案 0 :(得分:1)
JSF已经更新了arraylist中的bean。只需在动作方法中保持通常的方式:
public void save() {
mainBeanDAO.save(mainBeans);
}