Как скрыть часть полей с помощью флажка?

Как скрыть часть полей с помощью флажка на страницах Visualforce?


person user1192210    schedule 07.02.2012    source источник
comment
Вы хотите сделать это на лету с помощью javascript или с помощью контроллера apex и собственных функций Visualforce?   -  person Matt Lacey    schedule 07.02.2012


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

person Matt Lacey    schedule 08.02.2012