primefaces selectOneMenu에 OmniFaces 변환기를 사용하는 데 문제가 있습니다. 부서의 목록을 셀 편집 기능으로 데이터 테이블 datatable에 표시하고 있는데 한 열은 부서 이름을 표시하고 다른 열은 교수 이름을 표시합니다. 편집 할 때 selectOneMenu는 선택할 수있는 기능 목록과 함께 올바르게 표시되지만 제출시 저장되지 않습니다. 데이터 테이블에서 교수진 열을 제거하고 부서 이름이 문제없이 저장되며 누군가 내가 왜 그 이유를 알 수있게 도와줍니다. 교수 이름을 저장할 수 없습니다.Omnifaces Converter를 사용하여 데이터베이스에 selectOneMenu에서 객체를 저장하는 방법은 무엇입니까?
여기있는 부서 컨트롤러 여기에 다음은 onEdit 방법 공공 무효은 onEdit (RowEditEvent 이벤트) {
try {
Department department = (Department) event.getObject();
DepartmentController departmentController = (DepartmentController) FacesContext
.getCurrentInstance().getExternalContext().getRequestMap()
.get("departmentMB");
departmentController.updateDepartment(department);
} catch (Exception e) {
e.printStackTrace();
}
}
입니다
@ManagedBean(name = "departmentMB")
@RequestScoped
public class DepartmentController implements Serializable {
@ManagedProperty(value = "#{DepartmentService}")
IDepartmentService departmentService;
private static final long serialVersionUID = 1L;
private int department_id;
private String departmentName;
private Faculty selectedFaculty;
.
.
.//getters and setters
내 데이터 테이블 코드 여기
<p:dataTable id="deptTable" var="department"
value="#{departmentMB.departmentList}" editable="true"
rowIndexVar="rowIndex">
<p:ajax event="rowEdit" listener="#{departmentView.onEdit}"
update=":deptForm:messages" />
<p:column headerText="Name">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{department.departmentName}" />
</f:facet>
<f:facet name="input">
<h:inputText value="#{department.departmentName}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Faculty">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{department.faculty.facultyName}" />
</f:facet>
<f:facet name="input">
<p:selectOneMenu id="iterator"
value="#{departmentMB.selectedFaculty}"
converter="facultyConverter" label="Faculty">
<f:selectItem itemLabel="Select one" noSelectionOption="true" />
<f:selectItems value="#{facultyMB.facultyList}" var="faculty"
itemLabel="#{faculty.facultyName}" itemValue="#{faculty}" />
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:rowEditor />
</p:column>
</p:dataTable>
입니다 업데이트 방법 - 최대 절전 모드 save() 메서드 사용
public void updateDepartment(Department department) {
try {
getDepartmentService().updateDepartment(department);
} catch (DataAccessException e) {
e.printStackTrace();
}
}
그리고 마지막으로 내 OmniFaces 변환기
@FacesConverter("facultyConverter")
public class FacultyConverter extends SelectItemsConverter {
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Integer id = (value instanceof Faculty) ? ((Faculty) value).getFacultyId() : null;
return (id != null) ? String.valueOf(id) : null;
}
}
콘솔에 오류가 있습니까? – elias
죄송합니다. 분명히 들리지만, 업데이트 메서드를 호출하기 전에'department.setFaculty (selectedFaculty)'가 누락 되었습니까? – elias
@eljunior에는 포인트가 있지만'
'는'# {departmentMB.selectedFaculty} '가 아닌'# {department.faculty}'이어야합니다! 시도 해봐. – BalusC