Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод информации на jsp страницу из 2 таблиц / 14 сообщений из 14, страница 1 из 1
16.06.2013, 18:49:02
    #38299116
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
В общем ситуация такая. Надо вывести на jsp страницу выборку из 2 таблиц. А именно есть JPQL запрос

Код: plsql
1.
2.
3.
4.
@NamedQuery (
                 name = "findLastFiveTransaction",    
                 query = "select c, b from Categorietype c, Balance b  where c.user = :user and b.user = :user"
                 )



Всё что выбрало передаю в List

Код: java
1.
2.
3.
public List getUserTransaction(User user) {
    return em.createNamedQuery("findLastFiveTransaction").setParameter("user", user).getResultList();
    }



и сервлетом уже передаю на jsp страницу

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<table border="1">

  <tr>
    <th>Sum</th>
    <th>Descrip</th>
    <th>Name</th>
  </tr>
<c:forEach items="${result}" var="r">
  <tr>
    <td> ${r.sum} </td>
    <td> ${r.descrip} </td>
    <td> ${r.name} </td>
  </tr>
</c:forEach>
</table> 



В результате получаю ошибку когда пытаюсь вывести на страницу

Errororg.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "sum"

Выяснил что туда уходит объекты целые, но как сделать из него читаемый вид не знаю. Если делать это для отдельного сущности, то там достаточно переопределить метод toString.

Как правильно это сделать?

Спасибо.
...
Рейтинг: 0 / 0
16.06.2013, 18:59:06
    #38299120
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
UserQ, я вообще Java не знаю, но немного знаю SQL, поэтому сразу вижу что в запросе два поля: категория (или что-то подобное) и баланс, а на страницу Вы пытаетесь вывести три поля: сумма (наверное это баланс?), какой-то дескриптор и имя пользователя.
Переделайте запрос в соответствие с выводимой информацией и все будет работать...
...
Рейтинг: 0 / 0
16.06.2013, 19:05:36
    #38299121
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
Запрос работает верно. Я проверял в JPQL Editor от NetBeans. Могу переписать, что соответственно и пробовал, разные варианты. На конечный результат не влияло позитивно. По этому тут проблемы у меня дальше запроса, а именно между сервлетом и передачей на jsp страницу.

Можно и такой вариант

Код: plsql
1.
select c.name, b.descirp, b.sum from Categorietype c, Balance b




Могу ещё показать мои сущности

Сущность Balance
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
    @NamedQuery (name = "findLastFiveTransaction",
    query = "select c, b from Categorietype c, Balance b  where c.user = :user and b.user = :user")
    public class Balance implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private String id;

    private BigDecimal sum;
    @Column(name="Description")
    private String descrip;



Сущность Categorietype

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Entity
public class Categorietype implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private String id;

    private String name;

    //bi-directional many-to-one association to Balance
    @OneToMany(mappedBy="categorietype")
    private List<Balance> balances;

    //bi-directional many-to-one association to User
    @ManyToOne
    @JoinColumn(name="UserID")
    private User user;
...
Рейтинг: 0 / 0
16.06.2013, 19:22:17
    #38299137
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
авторselect c.name, b.descirp, b.sum from Categorietype c, Balance b ...

уже более правильно, только порядок полей должен быть как в выводе на страницу:

select b.sum, b.descrip, c.name ....
...
Рейтинг: 0 / 0
16.06.2013, 19:32:56
    #38299144
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
авторselect c.name, b.descirp, b.sum from Categorietype c, Balance b ...

уже более правильно, только порядок полей должен быть как в выводе на страницу:

select b.sum, b.descrip, c.name ....
...
Рейтинг: 0 / 0
16.06.2013, 20:04:19
    #38299156
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
d7iавторselect c.name, b.descirp, b.sum from Categorietype c, Balance b ...

уже более правильно, только порядок полей должен быть как в выводе на страницу:

select b.sum, b.descrip, c.name ....

Как бы там ни было, к положительному результату это не привело.
...
Рейтинг: 0 / 0
16.06.2013, 21:03:08
    #38299185
just_vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
Если убрать запрос и заменить его каким нибудь mock'ом то работает? имхо запрос не при делах
...
Рейтинг: 0 / 0
16.06.2013, 21:08:02
    #38299188
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
just_vladimir,

Проблема именно с выводом данных из 2 таблиц. Однотабличные выводы работаю на ура.

К примеру

Код: plsql
1.
SELECT b FROM Balance b 



Всё работает и выводит данные как надо. Могу брать из возвращаемого значения какие угодно поля. Правда при таком пользовался лишь типизированным списком List<Balance>
...
Рейтинг: 0 / 0
16.06.2013, 21:26:43
    #38299193
just_vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
Запрос то что то типо List<Object[]> возвращает? Сделайте такой mock да научитесь его выводить. Нет возможности по быстрому проверить, как это правильно провернуть в jstl. В край всегда можно через скриплет нафигачить )))
...
Рейтинг: 0 / 0
16.06.2013, 21:31:59
    #38299194
d7i
d7i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
Я не знаю, конечно, java, но что-то в сущностях странное...
Я не вижу там описания полей user, по которым делается выборка (параметры).
И вообще не вижу связки (join) между этими двумя таблицами по полю user (есть только UserID)...
Похоже что напутано именно там...
...
Рейтинг: 0 / 0
16.06.2013, 21:51:07
    #38299201
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
just_vladimirЗапрос то что то типо List<Object[]> возвращает? Сделайте такой mock да научитесь его выводить. Нет возможности по быстрому проверить, как это правильно провернуть в jstl. В край всегда можно через скриплет нафигачить )))

List<Object> пробовал, на что то ругалось, только на что именно не помню. В общем не работало. Если я вывожу всё в сервлет, не передавая на страницу получаю

[[Ljava.lang.Object;@61e4a532, [Ljava.lang.Object;@6a19a7d3,

Те ему не хватает переопределённого метода toString. Как это исправить не знаю. Если его разобрать на части, в сервлете, выводит данные как те что надо.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
			List all =  balance.getUserTransaction(user);
			PrintWriter out = response.getWriter();
			out.print("<html>");
			Iterator i = result.iterator();
			while (i.hasNext()){
				Object[] o = (Object[]) i.next();
				for (int j = 0; j < o.length; j++) {
					out.print("<br>" +o[j]);
				}



Этот код выведет в сервлет данные из запроса.
...
Рейтинг: 0 / 0
16.06.2013, 21:57:00
    #38299204
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
d7iЯ не знаю, конечно, java, но что-то в сущностях странное...
Я не вижу там описания полей user, по которым делается выборка (параметры).
И вообще не вижу связки (join) между этими двумя таблицами по полю user (есть только UserID)...
Похоже что напутано именно там...

Не думаю что там напутано, хотя может быть. Делал всё автоматом Eclipse, до этого нареканий не было. Было написан несколько методов, таких как регистрация и логин, всё работало корректно, но опять же там была использована одна таблица.

У них связь идёт по другому полю

Извиняюсь не всё ставил, вот так правильно

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
package ua.home.model;

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;


/**
 * The persistent class for the balance database table.
 * 
 */
@Entity
public class Balance implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private String id;

	
        @Column(name="Sum")
	private BigDecimal sum;
	
	@Column(name="Description")
	private String descrip;
	
	//bi-directional many-to-one association to Categorie
	@ManyToOne
	@JoinColumn(name="CategorieID")
	private Categorie categorie;

	//bi-directional many-to-one association to Categorietype
	@ManyToOne
	@JoinColumn(name="TypeID")
	private Categorietype categorietype;

	//bi-directional many-to-one association to User
	@ManyToOne
	@JoinColumn(name="UserID")
	private User user;

	
}



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
package ua.home.model;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;


/**
 * The persistent class for the categorietype database table.
 * 
 */
@Entity
@NamedQueries ({
				@NamedQuery(
							name = "getCategoryTypeByUser",
							query = "select o from Categorietype o where o.user = :user or o.user is null"
						),
				@NamedQuery(
							name = "getCategoryTypeByName",
							query = "select catType from Categorietype catType where catType.name = :name"
						),
})
public class Categorietype implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private String id;

	private String name;

	//bi-directional many-to-one association to Balance
	@OneToMany(mappedBy="categorietype")
	private List<Balance> balances;

	//bi-directional many-to-one association to User
	@ManyToOne
	@JoinColumn(name="UserID")
	private User user;

}
...
Рейтинг: 0 / 0
16.06.2013, 23:46:42
    #38299242
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
Ты прикольный конечно, отдаешь в jsp массив объектов и ожидаешь что EL магическим образом догадается найти в этом массиве твой sum. Как считаешь сработает такая конструкция -

Код: java
1.
2.
Object[] o = (Object[]) i.next();
o.getSum();


?
Вот и я думаю что не сработает, таким образом в jsp ты должен пихать List<ConcreteObject>, который имеет метод getSum(), или List<HashMap<String, Object>>, в хэшмапе должно быть что-то вроде sum:BigDecimal(20.0);

Чтобы вернуть из native query не массив объектов, а кастомный объект надо смотреть в сторону ResultTransformer. Если желания заводить отдельный класс нет, надо перегнать массив объектов в мапу.
...
Рейтинг: 0 / 0
16.06.2013, 23:52:44
    #38299245
UserQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод информации на jsp страницу из 2 таблиц
забыл ник,

Попробую ваш вариант реализовать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод информации на jsp страницу из 2 таблиц / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]