ap : selectOneMenu에 문제가 있습니다. 내가 무엇을하든 JSF가 JPA 엔티티에서 setter를 호출하도록 할 수 없습니다. 다음 메시지와 함께 JSF 유효성 검사가 실패합니다.
양식 : 위치 : 유효성 검사 오류 : 값이 유효하지 않습니다.
나는 같은 유형의 여러 다른 클래스 (즉, 조인 테이블 클래스)에서이 작업을 수행하고 있지만 평생이 작업을 수행 할 수는 없습니다.
누군가가 이런 종류의 문제에 대한 문제 해결 / 디버깅 팁을 던질 수 있다면 대단히 감사하겠습니다.
로그 문을 사용하여 다음을 확인했습니다.
- 에서
Conveter
올바른null
값이 아닌 값을 반환 합니다. - 내 JPA 엔터티에 Bean 유효성 검사가 없습니다.
- setter
setLocation(Location location)
는 호출되지 않습니다.
이것은 내가 할 수있는 가장 간단한 예이며 단순히 작동하지 않을 것입니다.
<h:body>
<h:form id="form">
<p:messages id="messages" autoUpdate="true" />
<p:selectOneMenu id="location" value="#{locationStockList.selected.location}" converter="locationConverter">
<p:ajax event="change" update=":form:lblLocation"/>
<f:selectItems value="#{locationStockList.locationSelection}"/>
</p:selectOneMenu>
</h:form>
</h:body>
변환기:
@FacesConverter(forClass=Location.class, value="locationConverter")
public class LocationConverter implements Converter, Serializable {
private static final Logger logger = Logger.getLogger(LocationConverter.class.getName());
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value.isEmpty())
return null;
try {
Long id = Long.parseLong(value);
Location location = ((LocationManagedBean) context.getApplication().getELResolver().getValue(context.getELContext(), null, "location")).find(id);
logger.log(Level.SEVERE, "Converted {0} to {1}" , new Object[] {value, location});
return location;
} catch (NumberFormatException e) {
return new Location();
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null || value.toString().isEmpty() || !(value instanceof Location))
return "";
return String.valueOf(((Location) value).getId());
}
}
콘솔 출력 :
// Getter method
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0]
// Session Bean
INFO: Finding ejb.locations.Location with id=3
// Session Bean
INFO: ### Returning : ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3]
// Converter
SEVERE: Converted 3 to ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3]
// Getter method -> Where did my selected Location go ??
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0]
equals
검사가 발생하는지. 제 상황은 조금 복잡합니다. 사용자가 복잡한 라디오 레이아웃을 가질 수 있도록 고유 한 사용자 지정 구성 요소를 만듭니다. 하나의 라디오 그룹 (사용자 정의 구성 요소 바로 아래에 f : selectItems) 만 있으면 제대로 작동합니다. 그러나 레이아웃이 더 복잡 해짐에 따라 (여러 라디오 그룹, 각각 고유 한 f : selectItems가 있지만 모두 동일한 선택을 공유 함) ui : repeat 내에 f : selectItems가 있어야하고 ui : repeat가 내 사용자 지정 구성 요소 아래에 있습니다. 그런 다음이 문제가 발생했습니다. 나는 이것을 처리하는 mojarra 코드를보고 싶다