Я использую Spring MVC + Hibernate
Общий Дао
// getAll
@SuppressWarnings("unchecked")
public <T> List<T> getAll(Class<T> entityClass) throws DataAccessException {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(entityClass);
return criteria.list();
}
@Контроллер
@RequestMapping(value = "/genCompanyInfoUpdate", method = RequestMethod.POST)
public String genCompanyInfoUpdate(Model model) {
List<GenCountryModel> countryList=pt.getAll(GenCountryModel.class);
List<GenCurrencyModel> currencyList=pt.getAll(GenCurrencyModel.class);
GenCompanyInfoModel companyInfo=pt.getById(GenCompanyInfoModel.class, 1);
model.addAttribute("countryList", countryList);
model.addAttribute("currencyList", currencyList);
model.addAttribute("companyInfo", companyInfo);
return "gen/genCompanyInfoUpdate";
}
JSP
<c:if test="${not empty currencyList}">
<c:forEach items="${currencyList}" var="get" varStatus="counter">
<ct:Options setValue="${get.id}" setName="${get.isoCode}" selected="${companyInfo.genCurrencyModel.id}" setState="1" />
</c:forEach>
</c:if>
Все работает хорошо, но когда я меняю и использую проекцию в методе следующим образом, это дает исключение
java.lang.numberformatexception for input string id
java.lang.numberformatexception for input string isoCode
Изменения: использование ProjectionList в методе
@SuppressWarnings("unchecked")
public <T> List<T> getAll(Class<T> entityClass, String[] nameList) throws DataAccessException {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(entityClass);
ProjectionList pl = Projections.projectionList();
for (int i=0; i<nameList.length; i++) {
pl.add(Projections.property(nameList[i].toString()));
}
criteria.setProjection(pl);
return criteria.list();
}
Изменения в списке передачи @Controller [GenCurrencyModel]
@RequestMapping(value = "/genCompanyInfoUpdate", method = RequestMethod.POST)
public String genCompanyInfoUpdate(Model model) {
String []list={"id","isoCode"};
List<GenCountryModel> countryList=pt.getAll(GenCountryModel.class);
List<GenCurrencyModel> currencyList=pt.getAll(GenCurrencyModel.class,list);
GenCompanyInfoModel companyInfo=pt.getById(GenCompanyInfoModel.class, 1);
model.addAttribute("countryList", countryList);
model.addAttribute("currencyList", currencyList);
model.addAttribute("companyInfo", companyInfo);
return "gen/genCompanyInfoUpdate";
}
Тот же JSP
<c:if test="${not empty currencyList}">
<c:forEach items="${currencyList}" var="get" varStatus="counter">
<ct:Options setValue="${get.id}" setName="${get.isoCode}" selected="${companyInfo.genCurrencyModel.id}" setState="1" />
</c:forEach>
</c:if>
GenCurrencyModel
public class GenCurrencyModel implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "CURRENCYID")
@GeneratedValue
private long id;
@Column(name = "CODE")
private String currencyCode;
@Column(name = "DESCRIPTION")
private String currencyDesc;
@Column(name = "ISACTIVE")
private int isActive;
@Column(name = "MADELETE")
private int markAsDelete;
@Column(name = "ISOCODE")
private String isoCode;
@Column(name = "CURRENCYUNIT")
private String currencyUnit;
@Column(name = "CONNECTOR")
private String connector;
@Column(name = "SUBUNIT")
private String subUnit;
@Column(name = "RECENTUSERID")
private long recentUserId;
@Column(name = "RECENTUSERIP")
private String recentUserIp;
@Column(name = "DATETIME")
private Date dateTime;
@Column(name = "ISUPDATED")
private int isUpdated;
private GenCompanyInfoModel genCompanyInfoModel;
public GenCurrencyModel() {
super();
}
//Getter Setter
}
Я проверяю запрос из файла журнала. он успешно выполняется
и когда я удаляю следующую строку со страницы jsp, никаких исключений не возникает
<ct:Options setValue="${get.id}" setName="${get.isoCode}"
Примечание. ct:Options — это специальный тег JSP, который просто печатает значения, ничего особенного
После проекции результат запроса выглядит следующим образом
Hibernate: select this_.CURRENCYID as y0_, this_.ISOCODE as y1_ from GENCURRENCY this_
и оба возвращают список, и я проверяю оба size(), размер тоже одинаков!
Обнови меня!