2012-02-07 1 views

ответ

0

Я бы просто использовал Javascript, или еще лучше, jQuery.

0

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

Смежные вопросы