2012-02-22 3 views
0

나에게 이해가되지 않는 문제가 있습니다. 간단한 Ajax를 사용하여 selectionChange-Events를 발생시키는 목록 상자가 있습니다. 아이디어는 편집 버튼이 목록의 항목이 선택 될 때까지 활성화되지 않는다는 것입니다. 그래서 다음 코드를 만들었습니다.버튼이 아약스로 활성화/비활성화되었을 때 액션이 트리거되지 않음

<h:form> 
    <h:selectManyListbox value="#{bean.selectedIds}"> 
     <f:selectItems value="#{bean.listOfItems}" /> 
     <f:ajax render="edit" 
      listener="#{bean.selectionChanged}" /> 
    </h:selectManyListbox> 
    <br /> 

    <h:commandButton id="add" value="#{msgs.add}" 
     action="#{bean.addNew}" /> 

    <h:commandButton id="edit" value="#{msgs.edit}" 
     disabled="#{bean.editButtonDisabled}" 
     action="#{bean.edit}" /> 
</h:form> 

버튼이 활성화되고 내가 원하는대로 사용할 수 있지만 밝혀, 어떤 조치를 트리거 편집 버튼 밤은은 (나는 빈과 편집 -에 추가 - 편집 - 방법에 약간의 SYSOUT를 추가 메서드가 호출되지 않습니다) ... 대신 HTML이 변경됩니다. 위의 코드는 간단한 div에 중첩되어 있습니다. 편집을 클릭하면 전체 양식이 해당 div 외부에 있습니다.

추가 단추에이 아약스 동작을 추가 할 때 편집 단추에서 disabled-attribute를 제거하면 모든 것이 작동합니다.

나는 이미 BalusC 대답을 here으로 보았지만 그 목록과 관련된 실수는 찾을 수 없었다. 중첩 된 양식 등 ... 템플릿이있는 단순한 페이지.

저는 JBoss 7.1.Final에서 Mojarra 2.1.2를 사용하고 있습니다.

도움을 주시면 감사하겠습니다. 감사합니다

+0

commandButton 동작이 HTML 양식 요소에 첨부되므로 전체 양식을 다시 렌더링하지 않아도됩니까? –

+0

나는 그것을 시도했지만 도움이되지 않았다. 게다가, 왜 양식을 렌더링해야합니까? 나는 이것으로 생성 된 자바 스크립트가 DOM 트리의 버튼 만 바꿀 것이라고 예상했다. – lostiniceland

+0

이것은 단지 추측이었습니다. 나는 무력화/활성화가 어떻게 실현되는지 잘 모르겠습니다. 렌더링을 시도 했습니까? 예 : 두 개의 버튼이 조건부로 렌더링 되었습니까? –

답변

2

이 문제는 답의 점 (5)에 의해 덮여있다 ...이

<h:commandButton id="edit" value="#{msgs.edit}" 
    disabled="#{bikeManagementPanelBean.editButtonDisabled eq false}" 
    action="#{bean.edit}" /> 

시도 같은이 <h:panelGroup>로 다시 포장 대신 버튼의 렌더링하려고하는 당신을 링크되어 있습니다.

rendered 구성 요소의 속성과 부모의 모든 구성 요소가 요청을 제출 양식의 적용 요청 값 단계에서 false로 평가해서는 안된다. JSF는 즉석/해킹 된 요청에 대한 보호 수단의 일환으로 JSF를 다시 점검합니다. 뷰 범위에 빈을 두거나 빈의 (생성자) 생성자에서 조건을 미리 초기화하고 있는지 확인하여이를 수정해야합니다. 구성 요소의 disabled 속성에도 동일하게 적용됩니다. 양식 제출 처리 중에 true으로 평가되면 안됩니다.

나는 @ViewScopedBikeManagementPanelBean@RequestScoped을 변경하는 것이 좋습니다.

+0

Ups :-D ViewScoped가 가장 좋은 방법이라고 읽었지만 CDI를 사용하고 있습니다. -/ 위의 문장을 따를 때 (postconstruct에서 조건을 미리 초기화하는 경우) : 속성이 항상 false로 유지 될 것입니다. (선택이 없으면 버튼을 사용할 수 없으므로 내 경우에는 그렇습니까?) – lostiniceland

+1

일부 요청 매개 변수를 기반으로 사전 초기화를하지 않는 경우 제출 된 드롭 다운 값은 요청 매개 변수로 사용할 수 있습니다. 예,보기가 엉망입니다. 따라서 동일한보기와 상호 작용하면서 요청 매개 변수를 조작 할 필요가 없도록보기 범위가 존재합니다. CDI의 뷰 범위에 관해서는 가장 좋은 방법은'@ ConversationScoped '입니다. – BalusC

+0

다시 한번 감사드립니다. 나는 그것을 시도 할 것이다. ViewParameter로 가능해야합니다. – lostiniceland

0

+0

빠른 답장을 보내 주셔서 감사합니다. 불행히도 래핑이 문제를 해결하고 양식을 렌더링하지 않습니다 (질문에 두 번째 코멘트를 참조하십시오) – lostiniceland

+0

다시 내 대답을 편집 ... – Daniel

+0

ALMOST : - D 그것은 여전히 ​​작동하지 않지만 버튼을 사용할 때 페이지를 열 때. .. 행동이 시작됩니다. 그래서 아약스 호출이 발생하면 뭔가를 망쳐 놓은 것처럼 보입니다.html 소스를 살펴 보았지만 여기서는 아무 것도 변경되지 않았습니다. Firefox 용 애드온이 실제 DOM을 보여줄 수 있습니까? – lostiniceland

관련 문제