DateTimeField의 사용자 선택 값을 가져 오려고하지만 실패합니다. 나는 현재 내 DropDownChoice 오브젝트에 대해 완벽하게 작동합니다 다음 코드를 가지고 :wicket에서 사용자 입력 받기 DateTimeField
public class DateTimeFieldPanel extends Panel {
private final Date date;
private String value;
public DateTimeFieldPanel(Date date) {
super("component");
this.date = date;
final DateTimeField dateTimeField = new DateTimeField("dateTimeField", new PropertyModel<Date>(this, "date"));
dateTimeField.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
value = dateTimeField.getModel().getObject().toString();
}
});
add(dateTimeField);
}
public Date getDate() {
return date;
}
}
문제는으로 getObject()가 null를 돌려 있도록 모델이 어떤 이유로 객체가없는 것입니다. 내가 뭘 잘못하고 있니? 왜 이것이 DropDownChoicePanel에서 작동 하나 DateTimeField에서 작동하지 않습니까?
감사합니다.
업데이트 :
dateTimeField = new DateTimeField("dateTimeField", new PropertyModel<Date>(this, "date")) {
@Override
protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel) {
final DateTextField dateField = super.newDateTextField(id, dateFieldModel);
dateField.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
processInput();
}
});
return dateField;
}
@Override
protected TextField<Integer> newHoursTextField(final String id, IModel<Integer> model, Class<Integer> type) {
final TextField<Integer> hoursTextField = new TextField<Integer>(id, model, type);
hoursTextField.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
processInput();
}
});
hoursTextField.add(getMaximumHours() == 24 ? RangeValidator.range(0, 23) : RangeValidator.range(1, 12));
hoursTextField.setLabel(new Model<String>(HOURS));
return hoursTextField;
}
private int getMaximumHours() {
return getMaximumHours(use12HourFormat());
}
private int getMaximumHours(boolean use12HourFormat) {
return use12HourFormat ? 12 : 24;
}
@Override
protected boolean use12HourFormat() {
String pattern = DateTimeFormat.patternForStyle("-S", getLocale());
return pattern.indexOf('a') != -1 || pattern.indexOf('h') != -1 || pattern.indexOf('K') != -1;
}
};
는 기본적으로 나는 DateTimeField 세 TextField의 날짜, 시간 및 분에 대해 하나의 구성 것을 알아 냈 : 지금이 혼란 있습니다. 이 필드에 ajax 동작을 별도로 추가하는 대신 해당 메서드를 재정의 한 다음 processInput() 메서드를 호출하여 DateTimeField의 ModelObject가 업데이트되도록해야합니다. 이것은 날짜 부분에 적용됩니다. 몇 시간 동안 필드를 만드는 메서드를 재정의 할 수 있지만 processInput()을 호출하면 DateTimeField에 대한 ModelObject가 업데이트되지 않는 것처럼 보입니다. 마지막으로, 가장 큰 문제는 분 동안 필드를 만드는 방법이 없다는 것입니다. 그러므로 나는 그것을 우선 무시할 수 없다. 나는이 방법이 너무 복잡하다고 생각하지만, 나는 어디로 잘못 가고있는가?
도움을 주시면 감사하겠습니다.
안녕하세요. Thorsten, 제 질문에 답변 해 주셔서 감사합니다. 나는 2 개의 질문으로 떠났다. 가장 중요한 점은 앞에서 설명한 것처럼 newMinutesTextField() 메서드가 존재하지 않으므로 재정의 할 수 없습니다. 둘째로 (중요하지 않음) :이 솔루션은 여전히 모든 값을 별도로 제출하는 것으로 보입니다. 필드 중 하나 (날짜, 시간 또는 분)를 업데이트 한 후에는 양식 제출이 시작됩니다. 그래서 날짜를 입력하고 시간을 입력하기 시작하면 날짜가 이미 제출되었습니다. 그러나 이것은 내가 코딩 할 수있는 것이므로 큰 문제는 아닙니다. –
사과, 방금 널 값을 확인하는 부분을 간과 한 것 같습니다. 그러나 가장 큰 문제는 여전히 남아 있습니다. 또한 DateTimeField가 폼의 일부가 아니더라도 null 값을 확인할 수 있으므로 양식에 모든 것을 추가하는 이점이 확실하지 않습니다. –
양식을 추가 한 주된 이유는 3 가지 값 (날짜, 시간, 분)을 제출하는 것이었기 때문입니다.이 문제를 해결하기 위해 더 큰 양식이 필요할 수도 있고 모든 것이 제출되기를 원할 수도 있습니다. FormComponent 주위에 하나의 Form이 있어야합니다. 어떤 개찰판 버전을 사용하고 있습니까? 마지막 개찰구가있는 코드를 테스트했습니다.x 버전 및 newMinutesTextField() 메서드가 있습니다 –