code: @Override
  	public void decode(FacesContext context, UIComponent component) {
  		Panel panel = (Panel) component;
  
  		String clientId = panel.getClientId(context);
  		String jQueryClientID = clientId.replace(":", "_");
  		// the panel uses two ids to send requests to the server!
  		new AJAXRenderer().decode(context, component, panel.getClientId(context));
  		new AJAXRenderer().decode(context, component, jQueryClientID+"content");
  
  		String collapseStateId = clientId.replace(":", "_") + "_collapsed";
  
  		String submittedValue = (String) context.getExternalContext().getRequestParameterMap().get(collapseStateId);
  
  		if (submittedValue != null) {
  			if (Boolean.valueOf(submittedValue) != panel.isCollapsed())
  				panel.setCollapsed(Boolean.valueOf(submittedValue));
  		}
  	}
docs: This methods receives and processes input made by the user. More
  specifically, it ckecks whether the user has interacted with the current
  b:panel. The default implementation simply stores the input value in the
  list of submitted values. If the validation checks are passed, the values
  in the <code>submittedValues</code> list are store in the backend bean.
  
  @param context
  the FacesContext.
  @param component
  the current b:panel.