2015-03-02 4 views
0

Я новичок в JSF и бобах, и у меня есть ситуация, когда мне нужно получить некоторые данные из DB (oracle) и отобразить на консоли. мой первый компонент будет считывать данные из JSF и вызывать соответствующий метод во втором компоненте, а список с данными будет отправлен обратно в bean-компонент. на основе данных снова будет использоваться еще один метод во втором компоненте для дополнительных данных. наконец, данные будут опубликованы пользователю. мой второй компонент будет отвечать за соединения БД. вот мой код. первого боба,сохранение сессий в jsf и java beans

String ban = null,ban1 = null; 
masterlist = (ArrayList<ThreadDTO>) getMbd().getBanOrCtn(dbean); 
if (masterlist.isEmpty()) { 
    setSuccess(2); 
    return; 
    } else { 
    Iterator<ThreadDTO> itr = masterlist.iterator(); 
     while (itr.hasNext()) { 
     ThreadDTO dto = (ThreadDTO) itr.next(); 
     ban1 = dto.getWireless_ban(); 
     if (ban1 != null) { 
     ban = ban1; 
     break; 
     } 
    } 

    ctnThreadList = (ArrayList<ThreadDTO>) getMbd().getThreads(dbean); 
    dbean.setSearchby("wireless_ban"); 
    dbean.setSearchValue(ban); 
    banThreadList = (ArrayList<ThreadDTO>) getMbd().getThreads(dbean); 
    masterlist.clear(); 
    masterlist = (ArrayList<ThreadDTO>) getMbd().removeDuplicates( ctnThreadList, banThreadList); 
    setResultlist((ArrayList<ThreadDTO>) getMbd().getApis(masterlist)); 

    } 

Второй Бин,

public ArrayList<ThreadDTO> getBanOrCtn(SearchDetailsDTO db) throws Exception { 
    ArrayList<ThreadDTO> threadlist1 = new ArrayList<>(); 

    //query here 

    try { 
    connection = getConnections(timeZone);//getting connection 
      stmt = connection.createStatement(); 
      rs = stmt.executeQuery(banQuery); 

     if (!rs.isBeforeFirst()) { 
      System.out.println("empty resultset"); 
      stmt.close(); 
      rs.close(); 
      connection.close(); 

     } else {    
       while (rs.next()) { 
       ThreadDTO thread = new ThreadDTO(); 

       //code to set the values 

       break; 
      } 
     } 
    } catch (SQLException sql) { 
     addErrorMessage(sql.getMessage()); 
    } 
    return threadlist; 
} 

это не может быть хорошей практикой кодирования, однако это работает нормально для одного пользователя, но мое требование должно быть доступен нескольким пользователям. может ли кто-нибудь рассказать мне, как я могу это достичь. Заранее спасибо.

ответ

0

Если вам нужно поддерживать данные в рамках сеанса с ограниченным доступом между двумя компонентами, я бы рекомендовал вам вводить управляемые компоненты. Вы можете сделать это, используя @ManagedProperty, чтобы аннотировать компонент в другом. Затем вы можете легко получить доступ к методам этого компонента. Здесь вы можете найти больше, а также пример. http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/

+0

Спасибо за ваш быстрый ответ. Я все еще получаю ошибку ExhaustedResultSet и закрытую ResultSet. но это должно быть дифференцировано правом сеанса? PLS, дайте мне знать, как пройти эту ошибку. –

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