我需要添加新记录到列表,从数据库中检索, - 这似乎是简单的,但如何连接(合并)这两种方法:
public void addNewUser(){
myList= new ArrayList<>();
Values newValue = new Values(this.id, this.orderNo, this.productName, this.price, this.qty);
newValue.setEditable(true);
myList.add(newValue);
}
我使用这样的方法从sql数据库中检索用户列表:
private List<Values> valuesList;
private Values allValues;
private static List<Values> getUsers() {
try {
databaseConnection();
String SQL = "SELECT * FROM Registration";
System.out.println("Retrieve values from Registration table...");
PreparedStatement prepStatement = connection.prepareStatement(SQL);
valuesList = new ArrayList<>();
ResultSet resultSet = prepStatement.executeQuery();
boolean found = false;
while (resultSet.next() == true) {
allValues = new Values();
allValues.setId(resultSet.getInt("id"));
allValues.setOrderNo(resultSet.getString("orderNo"));
allValues.setProductName(resultSet.getString("productName"));
allValues.setPrice(resultSet.getBigDecimal("price"));
allValues.setQty(resultSet.getInt("qty"));
valuesList.add(allValues);
found = true;
}
resultSet.close();
prepStatement.close();
close(connection);
if (found) {
return valuesList;
} else {
return null;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
System.out.println("Error in getUsers()-->" + e.getMessage());
}
return (null);
}
public List<Values> getInformation() {
return getUsers();
}
这是我的显示页面:
<h:dataTable value="#{user.information}" var="x" border="1">
<h:column>
<f:facet name="header">
<h:outputText value="Id"></h:outputText>
</f:facet>
<h:outputText value="#{x.id}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Order No"></h:outputText>
</f:facet>
<h:inputText value="#{x.orderNo}" rendered="#{x.editable}"></h:inputText>
<h:outputText value="#{x.orderNo}" rendered="#{not x.editable}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Product name"></h:outputText>
</f:facet>
<h:inputText value="#{x.productName}" rendered="#{x.editable}"></h:inputText>
<h:outputText value="#{x.productName}" rendered="#{not x.editable}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Price"></h:outputText>
</f:facet>
<h:inputText value="#{x.price}" rendered="#{x.editable}"></h:inputText>
<h:outputText value="#{x.price}" rendered="#{not x.editable}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Quantity"></h:outputText>
</f:facet>
<h:inputText value="#{x.qty}" rendered="#{x.editable}"></h:inputText>
<h:outputText value="#{x.qty}" rendered="#{not x.editable}"></h:outputText>
</h:column>
</h:dataTable>
<h:commandButton value="AddNew" action="#{user.add}"></h:commandButton>
答案 0 :(得分:0)
如果你想在列表中添加第一个方法之类的其他值,那么你可以这样做:
//myList = new ArrayList<>(); you dont need to use this, this can empty your list
myList = getUsers();//get your List
Values newValue = new Values(this.id, this.orderNo, this.productName, this.price, this.qty);
//add a new element to your list
newValue.setEditable(true);
myList.add(newValue);
<强> N.B 强>
您的 xhtml :
出现问题<h:commandButton value="AddNew" action="#{user.add}"></h:commandButton>
因此,如果您尝试拨打addNewUser()
,那么这不适合您。
<强>解决方案强>
这可以调用您的方法addNewUser()
<h:commandButton value="AddNew" action="#{user.addNewUser}"></h:commandButton>
之后:
您应该更新您的dataTable
<h:commandButton value="AddNew" action="#{user.addNewUser}" update="idOfYourDataTable"/>
不要忘记在您的dataTable中添加ID:
<h:dataTable value="#{user.information}" var="x" border="1" id="idOfYourDataTable">
...
另一件事:
<h:dataTable value="#{user.information}"
确保List<Values> information
中有managedBean
,因为您输入的代码没有列表信息。
希望这可以帮到你。