Принимая во внимание подход Salesforce (сохранение веса страницы и т. Д.), Вы можете сделать что-то вроде следующего:
<apex:inputCheckbox value="{!theBool}">
<apex:actionSupport event="onChange" action="{!myAction}" rerender="theFieldsPanel"/>
</apex>
<apex:outputPanel id="theFieldsPanel">
<apex:variable var="v" value="" rendered="{!theBool}">
<apex:inputField value="{!someField"} rendered/>
<!-- more fields etc. -->
</apex:variable>
</apex:outputPanel>
Обратите внимание, что я не использую атрибут rendered
на панели выводаСамо по себе, это потому, что если он не отображается, то он не существует на странице и, следовательно, не является хорошей целью rerender
!Теперь вам просто нужно простое действие на контроллере (вы можете выполнить любую другую логику здесь, если это необходимо):
public Pagereference myAction()
{
// any logic etc. goes here
return null;
}
Преимущество таких действий в отличие от javascript заключается в том, что вы можетеубедитесь, что если поля скрыты, значения не будут отправлены обратно в контроллер для переменных, с которыми они связаны.Простое сокрытие вещей с помощью javascript не будет иметь такого же эффекта, так что, скажем, пользователь набрал что-то в одном из полей, а затем спрятал их, что бы он ни набрал, они все равно окажутся в соответствующих переменных контроллера.