2015-11-05 1 views
0

Я использовал LinkHashMap для извлечения данных из базы данных и заполнения его в своем списке в JSF. Список будет заполнен. В принципе, если пользователь выбирает два элемента из списка и нажимает кнопку командной строки, приложение должно отображать ему общую цену. В основном в моей таблице, у меня есть две колонки, пункт и цена. Элемент (String) отображается в списке. Но моя проблема заключается в том, как получить цену (double), которая является значением, чтобы я мог рассчитать цену за количество выборов, которые пользователь делает на странице JSF. Пожалуйста, помогите мне решить эту проблему. Спасибо & С уважением.JSF LinkHashMap динамически заполняет список из базы данных

Смотрите мои коды ниже:

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 Page

<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

Я не совсем уверен, что ваша цель, но О.Б. Значение неверно. Вы связываете selectItems с LinkedHashMap, что кажется прекрасным. Но ценность вашего выбора связана с тем же!

Что я предлагаю:

  • Модель ваши элементы как объект, например, StoreItem (с атрибутами идентификатор, наименование, цена)
  • Используйте List<StoreItem> allItems для всех доступных элементов
  • Используйте List<StoreItem> selectedItems для SelectedItems
  • Использование <f:selectItems value="#{menuBean.allItems}" var="i" itemLabel="#{i.name}" itemValue="#{i}"/>
  • Зарегистрировать конвертер для StoreItem для преобразования между представлением String (с использованием id) и представление объекта.
  • Итерация в вас calculate метод над selectedItems.
+0

Что вы предлагаете? –

+0

Отправил ответ с предложениями ... – Thor

+0

Мне все еще не ясно! :( Можете ли вы исправить мои коды, пожалуйста, –

Смежные вопросы