Я пользователь Tapestry5, и у меня есть форма с полями gazillion, на которых все увеличивается с помощью числового.Зацикливание компонента текстового поля с динамическими свойствами объекта
пример
timesheet.tsHours01 timesheet.tsHours02 и т.д.
Я хотел бы динамически петли, но не смогли полностью получить работу. То, что я пробовал до сих пор.
@Property
private List<TimeSheetEntity> timeSheetEntity;
@Property
private List<TsWhour> tsWhours;
@Property
private TsWhour tsWhour;
public void onPrepareFromForm() {
this.timeSheetEntity = timeSheetService.getCreateOrUpdate(timeSheetEntity);
tsWhours = new ArrayList<TsWhour>();
tsWhours.add(new TsWhour(timeSheetEntity, "TsWhours01"));
tsWhours.add(new TsWhour(timeSheetEntity, "TsWhours02"));
tsWhours.add(new TsWhour(timeSheetEntity, "TsWhours03"));
}
public class TsWhour {
private TimeSheetEntity timeSheetEntity;
private String id;
private BigDecimal property;
public TsWhour() {
}
public TsWhour(TimeSheetEntity timeSheetEntity, String id) {
this.timeSheetEntity = timeSheetEntity;
this.id = id;
}
public BigDecimal getProperty() {
try {
Method method = TimeSheetEntity.class.getMethod("get" + id);
return (BigDecimal) method.invoke(timeSheetEntity);
} catch (NoSuchMethodException ex) {
Logger.getLogger(TimeSheet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(TimeSheet.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(TimeSheet.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(TimeSheet.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(TimeSheet.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public void setProperty(BigDecimal value) {
System.out.println(value);
}
public TimeSheetEntity getTimeSheetEntity() {
return timeSheetEntity;
}
public void setTimeSheetEntity(TimeSheetEntity timeSheetEntity) {
this.timeSheetEntity = timeSheetEntity;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Я смог получить страницу для загрузки, но при сохранении его из строя. Если возможно, я бы предпочел не указывать тип данных как bigdecimal, чтобы он был полностью динамичным.
Привет, Говард, я строю временной лист с текстовыми полями, который охватывает более 14 дней, но затем имеет много строк, которые управляют часами работы, больными, людьми, каникулами и т. Д. Во всяком случае TimeSheetEntity является объектом спящего режима, а TsWhour ничто иное, как внутренний класс, используемый в качестве эксперимента для получения этой работы. TsWhours01 означает расписание рабочего дня 1 день. TsWhours01 на самом деле является свойством в моем TimeSheetEntity или столбце в базе данных, который проходит через TsWhours14. Я надеялся объединить свойства в интерфейсе, а не жестко кодировать их. Я получил идентификатор от имени свойства. –
Есть ли примеры использования службы PropertyAccess? –
Просто взгляните на [javadoc] (http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PropertyAccess.html), @Inject PropertyAccess и выходите! –