Как скрыть часть полей с помощью флажка на страницах Visualforce?
Как скрыть часть полей с помощью флажка?
Ответы (1)
Предполагая подход 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 не будет иметь такого же эффекта, поэтому, скажем, пользователь набрал что-то в одном из полей, а затем скрыл их, все, что он набрал, все равно попадет в соответствующие переменные контроллера.