2014-08-28 5 views
1

JSF 형식이 있고 selectBooleanCheckbox가 있습니다. 확인란의 값이 true이면 그 옆에 콤보 상자가 표시됩니다. 하지만 어떻게 든 작동하지 않습니다.Ajax 렌더링이 작동하지 않습니다. SelectBooleanCheckbox

AJAX:EVENTS_COUNT 1 
editForm editForm 
editForm:collector 
editForm:collectorType 
editForm:dsCorrelationRul...  
editForm:dsCreationRule 
editForm:dsDescription 
editForm:dsName 
editForm:id 2c90950048166abc0148177755040025 
editForm:selectedTargetsF...  
editForm:type Active Directory - Direct 
javax.faces.ViewState 1920301575480395177:8510885827764100150 
javax.faces.behavior.even... click 
javax.faces.partial.ajax true 
javax.faces.partial.event click 
javax.faces.partial.execu... editForm:provisioningTargetCollector editForm:provisioningTargetCollector 
javax.faces.partial.rende... editForm:targetCollectorsGroup 
javax.faces.source editForm:provisioningTargetCollector 
rfExt null 

응답 : 이것은 POST 요청입니다 방화 광

에서 복사 :

 <h:outputText value="Condition"/> 
     <h:selectBooleanCheckbox id="provisioningTargetCollector" 
          value="#{targetSource.provisioningTargetCollector}" 
          disabled="#{!sp:hasRight(facesContext, 'ManageApplication')}" 
          readonly="#{!sp:hasRight(facesContext, 'ManageApplication')}"> 
          <f:ajax render="targetCollectorsGroup" /> 
          </h:selectBooleanCheckbox> 

     <h:outputText value="Provisioning Target Collector"/> 
     <h:panelGroup id="targetCollectorsGroup"> 
     <a4j:outputPanel id="targetCollectors"> 
      <h:selectOneMenu id="collector" 
          value="#{targetSource.selectedTargetCollector}" 
          rendered="#{empty targetSource.object.id}" 
          disabled="#{!sp:hasRight(facesContext, 'ManageApplication')}" 
          readonly="#{!sp:hasRight(facesContext, 'ManageApplication')}"> 
      <f:selectItem itemValue="" itemLabel="#{msgs.select_provisioning_target_collector}"/> 
      <f:selectItems value="#{targetSource.targetCollectors}"/> 
      </h:selectOneMenu> 
      <h:selectOneMenu id="fixedTargetCollector" value="#{empty targetSource.selectedTargetCollector ? 'None' : targetSource.selectedTargetCollector}" 
          rendered="#{not empty targetSource.object.id}" 
          disabled="true" 
          readonly="true"> 
      <f:selectItem itemValue="#{empty targetSource.selectedTargetCollector ? 'None' : targetSource.selectedTargetCollector}" 
          itemLabel="#{empty targetSource.selectedTargetCollector ? msgs.none : targetSource.selectedTargetCollector}"/> 
      </h:selectOneMenu> 
     </a4j:outputPanel> 
     </h:panelGroup> 

콩 클래스 방법 :

private boolean _provisioningTargetCollector; 

public boolean isProvisioningTargetCollector() { 

    return _provisioningTargetCollector; 
} 

public void setProvisioningTargetCollector(boolean provisioningTargetCollector) { 

    _provisioningTargetCollector = provisioningTargetCollector; 
} 

참고 여기

내 코드입니다 :

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response><changes><update id="editForm:targetCollectorsGroup"><![CDATA[<span id="editForm:targetCollectorsGroup"><span id="editForm:targetCollectors"><select id="editForm:collector" name="editForm:collector" size="1"> <option value="">Select a Provisioning Target Collector ...</option> 
    <option value="AD Test">AD Test</option> 
    <option value="ADWindow">ADWindow</option> 
    <option value="ADTestSth">ADTestSth</option> 
</select></span></span>]]></update><update id="javax.faces.ViewState"><![CDATA[1920301575480395177:8510885827764100150]]></update><extension id="org.richfaces.extension"><render>editForm:targetCollectorsGroup</render></extension></changes></partial-response> 
+0

'실행 = "@ this"'를'f : ajax'에 추가 한 후에 시도해 볼 수 있습니까? –

+0

@tt_emrah 노력했습니다. 그래도 작동이 안되는. –

+0

''을 사용하여''을 바꾸어보십시오. 관련 없음 : 정말로 '이 필요합니까? 렌더링 목적으로'targetCollectors'를 사용할 수 있습니다. –

답변

3

원하는 기능을 구현하는 직접적인 방법은 문자 그대로 체크 박스 선택에 기반한 콤보 박스를 다시 렌더링하는 것입니다. 코드가 빈에서 특별한 필드를 필요로하지 않는다

<h:selectBooleanCheckbox binding="#{checkbox}"> 
    <f:ajax render="group" /> 
</h:selectBooleanCheckbox> 
<h:panelGroup id="group"> 
    <h:selectOneMenu ... rendered="#{checkbox.value}" /> 
</h:panelGroup> 

하는 것으로하고 UIComponent은보기에 바인딩 : 그건은 다음과 같은 방식으로 이루어집니다. 물론

, 당신은 당신이 당신의 모델을 필요로하는 경우뿐만 아니라 빈 속성을 통해 그것을 할 수 있습니다 :

주목할 가치가
<h:selectBooleanCheckbox value="#{bean.value}"> 
    <f:ajax render="group" /> 
</h:selectBooleanCheckbox> 
<h:panelGroup id="group"> 
    <h:selectOneMenu ... rendered="#{bean.value}" /> 
</h:panelGroup> 

이 기능에 의해뿐만 아니라 일반 자바 스크립트에 의해 달성 될 수 있다는 것입니다 요소의 display 속성을 noneblock 사이에서 토글합니다. 그러나 잠재적 인 악의적 인 공격 위협에 대비하여 JSF 구성 요소의 상태를 포스트 백을 통해 일관되게 유지해야합니다.

관련 문제