JSF LinkHashMap从数据库

时间:2015-11-05 06:43:24

标签: jsf jsf-2 selectonelistbox

我使用LinkHashMap从数据库中检索数据并将其填充到JSF中的列表框中。列表框已填充。基本上,如果用户从列表框中选择两个项目并单击计算命令按钮,则应用程序应向他显示总价格。基本上在我的表中,我有两列,Item和Price。 Item(String)显示在列表框中。但我的问题是如何检索价格(双),这是值,以便我可以计算用户在JSF页面中选择的数量的价格。请帮我解决这个问题。 谢谢&问候。

请参阅下面的代码:

Java代码

import java.util.LinkedHashMap;
import java.util.Map;
import java.sql.*;
public class Menu2 {
String url = "jdbc:mysql://localhost:3306/esd";
String user = "root";
String pw = "root";

String favlst;
double total;
Map<String,Object> lst; {
    try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, pw);


String sql = "SELECT * FROM list";
Statement stt = con.createStatement();
ResultSet rs = stt.executeQuery(sql);

lst = new LinkedHashMap<String, Object>();
while(rs.next()){
    double price = rs.getDouble("Price");
    String item = rs.getString("Item");
    lst.put(item, price);
}


}catch(Exception e){

    }
}

public double getTotal() {
    return total;
}

public void setTotal(double total) {
    this.total = total;
}

public Map<String, Object> getSelectlst() {
    return lst;
}

public String Calculate(){
    total = 0;
double price = 0;
price += (Double)lst.get(item);


return "success";
  }
}

JSF页面

<f:view>
<h:form>
    <h3> Generated by Map </h3>

    <h:selectOneListbox value = "#{menu2.selectlst}">
        <f:selectItems value = "#{menu2.selectlst}"/>
    </h:selectOneListbox>   

    <br> <br>

    <h:commandButton value = "Calculate" action = "#{menu.Calculate}"/>
    <br> <br>
Total: Rs <h:outputLabel value = "#{menu.total}"></h:outputLabel>

</h:form>

1 个答案:

答案 0 :(得分:1)

我对您的目标不太确定,但显然selectOneListbox值不正确。您将selectItems绑定到LinkedHashMap,这似乎没问题。但你选择的价值必然相同!

我建议:

  • 将您的元素建模为对象,例如StoreItem(包含属性ID,名称,价格)
  • 对所有可用项目使用List<StoreItem> allItems
  • 对selectedItems
  • 使用List<StoreItem> selectedItems
  • 使用<f:selectItems value="#{menuBean.allItems}" var="i" itemLabel="#{i.name}" itemValue="#{i}"/>
  • StoreItem注册一个转换器,以在String表示(使用id)和Object表示之间进行转换。
  • calculate上使用selectedItems方法迭代。