Selectmanymenu with a header facet?

UI Components for JSF
Post Reply
Lyrionus
Posts: 60
Joined: 31 Aug 2011, 09:09

04 Oct 2011, 10:29

I have this at the moment but it is not working: is it possible to get a header facet on the selectmanymenu? I figured since picklist can have one the selectmanymenu should be able to have one at the moment

Code: Select all

<p:selectManyMenu id="requiredPermissions" value="#{profileBean.selectedRequiredPermissions}" converter="#{profileBean.converter}" style="height:150px;width:200px;">  
<f:facet name="header">#{msgs_application['profile.required']}</f:facet>
 <f:selectItems value="#{profileBean.requiredPermissions}" var="requiredPermission" itemLabel="#{profileBean.isActive(requiredPermission)}" itemValue="#{requiredPermission}" />  
 </p:selectManyMenu>
JSF 2.0
Primefaces 3.2
Tomcat 7.0

Lyrionus
Posts: 60
Joined: 31 Aug 2011, 09:09

04 Oct 2011, 12:56

Turns out there isn't any, but we've written a renderer so it would make one:

Code: Select all

public class CaptionEnabledSelectManyMenuRenderer extends SelectManyMenuRenderer {

	@Override
	protected void encodeMarkup(final FacesContext context, final SelectManyMenu menu) throws IOException {
		final ResponseWriter writer = context.getResponseWriter();
		writer.startElement("div", null);
		writer.writeAttribute("class", "ui-selectmanymenu-container", null);

		String styleClass = menu.getStyleClass();
		styleClass = styleClass == null ? SelectManyMenu.CONTAINER_CLASS : SelectManyMenu.CONTAINER_CLASS + " "
				+ styleClass;
		styleClass = menu.isDisabled() ? styleClass + " ui-state-disabled" : styleClass;

		final UIComponent caption = menu.getFacet("caption");
		if (caption != null) {
			this.encodeCaption(context, caption);
			styleClass = styleClass.replaceFirst("ui-corner-all", " ui-corner-bottom");

		}

		final String clientId = menu.getClientId(context);
		final String style = menu.getStyle();

		writer.startElement("div", menu);
		writer.writeAttribute("id", clientId, "id");
		writer.writeAttribute("class", styleClass, "styleClass");
		if (style != null) {
			writer.writeAttribute("style", style, "style");
		}

		this.encodeInput(context, menu, clientId);
		this.encodeList(context, menu);

		writer.endElement("div");
		writer.endElement("div");
	}

	protected void encodeCaption(final FacesContext context, final UIComponent caption) throws IOException {
		final ResponseWriter writer = context.getResponseWriter();

		writer.startElement("div", null);
		writer.writeAttribute("class", "ui-selectmanymenu-caption ui-widget-header ui-corner-tl ui-corner-tr", null);
		caption.encodeAll(context);
		writer.endElement("div");
	}

}
this is for the css:

Code: Select all

.ui-selectmanymenu-container .ui-selectmanymenu-caption{
text-align: center;
padding: 4px 10px 4px 10px;
border-bottom: 0px none;	
}
.ui-selectmanymenu-container .ui-selectmanymenu {
	width:auto !important;
}
.ui-selectmanymenu-container{
	
}
just add the facet with name "caption" and it should work.
JSF 2.0
Primefaces 3.2
Tomcat 7.0

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 37 guests