나는 문제를 데에 값을 전달하지 roleController.selectedRole이 null입니다. 처음에는 관리되는 bean을 requestScope로 사용했지만 모든 요청에 따라 bean이 다시 생성 될 수도 있습니다. 그래서 ViewScoped를 수정하여 추가 버튼을 다시 작동하도록 수정했지만 여전히 수정 및 삭제와 같은 문제가 발생합니다.JSF primefaces 업데이트 대화 상자가 빈
다음과 같은 현상이 있습니다. 행을 선택하고 버튼 편집을 클릭합니다. 역할 정보가있는 대화 상자가 제대로 표시됩니다. 그러나 편집을 클릭하면 null 값을 얻습니다. 몇 가지 예를 보았지만 잘못된 것은 아닙니다. 그러나 나는 정말로 기본적인 것을 놓치고 있을지도 모릅니다./
어떤 통찰력이든 극찬 될 것입니다!
빈에 관해서는 나는 다음과 같습니다 정의 및 헤더 일 : UI를 ommitting 다음과 같이
@ManagedBean
@RequestScoped
....
private Roles selectedRole = new Roles();
(I have the normal setter and getter)
public void edit() {
Logger.getGlobal().log(Level.INFO, "====> EDIT ROLE" + selectedRole.getRole());
}
페이지입니다.
<h:form id="contentView">
<p:dataTable id="lstRoles" var="r" value="#{roleController.rolesList}" selectionMode="single"
selection="#{roleController.selectedRole}" rowKey="#{r.role}" paginator="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {CurrentPageReport} {RowsPerPageDropdown}"
rowsPerPageTemplate="10,15,50" rows="10">
<p:column headerText="Role" sortBy="#{r.role}">
<p:outputLabel value="#{r.role}"></p:outputLabel>
</p:column>
<p:column headerText="Description">
<h:outputLabel value="#{r.description}"></h:outputLabel>
</p:column>
<f:facet name="footer">
<p:commandButton value="New" icon="ui-icon-star" oncomplete="newRoleDialog.show()"></p:commandButton>
<p:commandButton value="Edit" icon="ui-icon-check" oncomplete="editRoleDialog.show()" update=":editRoleForm:editRolePanel"></p:commandButton>
<p:commandButton value="Delete" icon="ui-icon-trash"></p:commandButton>
</f:facet>
</p:dataTable>
<p:blockUI block="lstRoles" trigger="lstRoles">
LOADING
</p:blockUI>
</h:form>
<!-- Edit User -->
<p:dialog header="Edit User" widgetVar="editRoleDialog" resizable="false">
<h:form id="editRoleForm">
<p:panelGrid id="editRolePanel" columns="2">
<h:outputText value="Role: "></h:outputText>
<h:outputText value="#{roleController.selectedRole.role}"></h:outputText>
<h:outputText value="Description: "></h:outputText>
<p:inputText value="#{roleController.selectedRole.description}" required="true"></p:inputText>
<f:facet name="footer">
<p:commandButton value="Confirm" update=":contentView:lstRoles :growl" oncomplete="handleSubmitRequest(xhr, status, args, 'editRoleDialog','editRoleForm');" actionListener="#{roleController.edit()}"></p:commandButton>
<p:commandButton type="reset" value="reset"></p:commandButton>
</f:facet>
</p:panelGrid>
</h:form>
</p:dialog>
편집 : 나는 primefaces 3.5
EDIT 2 글래스 피쉬 3.1을 사용하고 : 그래서, 그것은 내가 outputlabel을 사용할 수 없습니다 것 같다. 입력 값을 변경하면 managedbean에서 필요한 값을 얻습니다. 행을 선택할 때 이미 처리되었다고 가정하지만 setter를 호출하기 때문입니다. 그러나 이것은 PK 키이므로 첫 번째 필드를 편집하고 싶지 않으며 테이블의 FK로도 사용됩니다. 그러나 적어도 나는 어떤 일이 벌어지고 있는지, 혹은 그 이상인지 알았습니다.
고맙지 만 그 중 하나는 작동하지 않습니다 :/bean을 viewscoped로 변경하면 모든 작업이 멈 춥니 다. RequestScope로 남겨두면 여분의을 추가해야합니다. 속성은 항상 첫 번째 recorde를 가리키며 여전히 bean get의 null을 가리 킵니다. 모든 것을 ViewScope로 변환하고 그 결과를 볼 것입니다 !!! 덕분에 –
코드를 자세히 살펴보십시오. OP는'
'을 사용하고 있습니다. 편집 대화 상자에서 데이터를 열면 정상적으로 작동합니다. 편집 대화 상자를 제출할 때 OP가 더 이상 사용할 수 없다고 불평하고 있습니다. – BalusC