2013-02-23 3 views
1

나는 문제를 데에 값을 전달하지 roleController.selectedRolenull입니다. 처음에는 관리되는 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로도 사용됩니다. 그러나 적어도 나는 어떤 일이 벌어지고 있는지, 혹은 그 이상인지 알았습니다.

답변

1

당신은 ManagedBean은의 selectedrole 속성에 데이터 테이블에서 선택한 역할을 설정해야합니다,이 시도 :

<p:commandButton value="Edit" icon="ui-icon-check" oncomplete="editRoleDialog.show()" update=":editRoleForm:editRolePanel"> 
    <f:setPropertyActionListener target="#{roleController.selectedRole}" value="#{r}"/> 
</p:commandButton> 

당신은 가장 가능성도 빈 ViewScoped를 확인해야합니다.

편집 : 나는 위의 코드가 필요 없다는 것을 명확히하기 위해 datatable의 선택 기능에 대해 몰랐습니다.

+0

고맙지 만 그 중 하나는 작동하지 않습니다 :/bean을 viewscoped로 변경하면 모든 작업이 멈 춥니 다. RequestScope로 남겨두면 여분의 을 추가해야합니다. 속성은 항상 첫 번째 recorde를 가리키며 여전히 bean get의 null을 가리 킵니다. 모든 것을 ViewScope로 변환하고 그 결과를 볼 것입니다 !!! 덕분에 –

+1

코드를 자세히 살펴보십시오. OP는'

'을 사용하고 있습니다. 편집 대화 상자에서 데이터를 열면 정상적으로 작동합니다. 편집 대화 상자를 제출할 때 OP가 더 이상 사용할 수 없다고 불평하고 있습니다. – BalusC

-1

시도 입력 된 텍스트에 valueChangeListener 속성이 있습니다. 엔티티의 일부를 가지고 있기는 정말 어렵습니다. @SessionScope. 유

<inputText value="#{bean.value}"/> 

를 사용하지만 유

<inputText value="#{bean.entity.value}"/> 

를 사용하는 경우 작동하지 않을 경우 그 확인 작업. valueChangeListener을 사용하고이 메소드를 작성하면 엔티티 값을 강제로 저장할 수 있습니다.

public void saveValue(ValueChangeEvent event) { 
     Integer newValue = (Integer) event.getNewValue();//u can use getOldValue to get value before 
     entity.setValue(newValue); 
    } 

Goodluck!

관련 문제