이 SO 스레드에서 설명한 유사한 문제가 발생했습니다. Why does JSF null out a nested class successfully instantiated in the backing bean? 중첩 된 객체가 여러 개인 객체와 각각의 속성을 생성하는 간단한 양식 (JSF-2.2)을 사용하고 있습니다. 인스턴스화가 성공적으로 수행되고 모든 객체와 그 자식이 null이 아닌 것을 볼 수는 있지만 어떤 이유로 양식을 제출할 때 전체 객체 트리가 다시 null로 설정됩니다. 아래의 예에서, 값 템플릿은제출시 JSF 중첩 된 객체가 null로 설정 됨
javax.el.PropertyNotFoundException 초래 : 대상 도달 할 수없는, '널' 가 null 돌아왔다.
왜냐하면 어떤 이유로 ArticleListConfiguration이 null로 설정되기 때문에 befor 제출이 발생합니다. 여기
그리고
<ui:composition template="../template/template.xhtml">
<ui:define name="content">
<h:form id="createArticleListForm">
<p:panel styleClass="content-panel">
<h:panelGrid
columns="2"
styleClass="borderless-grid"
columnClasses="create-article-list-panel, create-article-list-panel">
<p:panel
id="listValuesPanel">
<p:inputText
id="articleListName"
value="#{createArticleListController.articleList.name}"/>
<p:inputText
id="articleListSize"
maxlength="3"
value="#{createArticleListController.articleListSize}">
</p:inputText>
<p:selectBooleanCheckbox
id="saveArticleListConfigurationAsTemplate"
value="#{createArticleListController.articleList.articleListConfiguration.template}"/>
<h:panelGrid
columns="1">
<p:fileUpload
id="upload"
widgetVar="fileUploadWidget"
fileUploadListener="#{createArticleListController.uploadImages}"
multiple="true"
onstart="submitSelection()"
oncomplete="handleMultiFileUploadRequest(PF('fileUploadWidget'));"
allowTypes="/(\.|\/)(jpg|png)$/"
styleClass="ui-widget"/>
<p:remoteCommand
name="submitSelection"
process="@this"/>
</h:panelGrid>
</p:panel>
</h:panelGrid>
<br/>
<p:commandButton
id="createArticleListButton"
process="@this @form"
value="#{contentController.getContent('createArticleList')}"
actionListener="#{createArticleListController.onCreate()}"/>
</p:panel>
</h:form>
</ui:define>
는 백업 빈
@ManagedBean
@ViewScoped
public class CreateArticleListController extends AbstractController {
@Inject
private ArticleListService articleListService;
private ArticleList articleList;
private Integer articleListSize;
private List<Pair<String, InputStream>> files;
@PostConstruct
public void init() {
//The constructor of ArticleList creates and attaches instances of all necessary nested objects
articleList = new ArticleList();
files = new ArrayList<>();
}
public void onCreate() throws IOException {
articleListService.create(articleList, files);
navigateTo("articleListOverview");
}
public void uploadImages(FileUploadEvent event) {
try {
files.add(Pair.of(event.getFile().getFileName(), event.getFile().getInputstream()));
} catch (IOException e) {
LOGGER.log(Level.ERROR, "Error uploading files");
JsfMessageUtils.sendErrorMessageToUser("Error uploading files");
}
}
public ArticleList getArticleList() {
return articleList;
}
public void setArticleList(ArticleList articleList) {
this.articleList = articleList;
}
public Integer getArticleListSize() {
return articleListSize;
}
}
죄송합니다.이 설정기를 최소 작동 예제로 복사하는 것을 잊어 버렸습니다. 내 실제 컨트롤러는 조금 더 크고 그 세터를 확실히 포함합니다. 나는 또한 엔티티를 점검했다. 나는 실제로 인스턴스화가 빠졌지 만 그것을 추가해도 문제가 전혀 해결되지 않았습니다. 모든 아이디어를 어떻게 디버깅하는 것이 가장 좋습니까? – JohnPlata
다른 아이디어가 없습니다. –
xhtml 페이지에서 정상적으로 작동하는 컨트롤러로 답변을 업데이트했습니다. 확인 해봐. –