[jboss-user] [JBoss Seam] - Re: selectItems - Is it possible?
Kragoth
do-not-reply at jboss.com
Wed Oct 24 23:56:24 EDT 2007
1
No stack trace is given. The error message is from a h:messages component.
2
Seam 2.0.0CR2
JSF 1.2
3
I'm not entirely sure what I need to do regards Stateful / Stateless for this bean.
Another slightly smaller issue is that it does not select the "no Selection" item as default. I would like this to be the case. Any ideas on that?
I have created a somewhat working version by using the following.
The xhtml file:
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
| <html xmlns="http://www.w3.org/1999/xhtml"
| xmlns:ui="http://java.sun.com/jsf/facelets"
| xmlns:h="http://java.sun.com/jsf/html"
| xmlns:f="http://java.sun.com/jsf/core"
| xmlns:rich="http://richfaces.org/rich"
| xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
| xmlns:s="http://jboss.com/products/seam/taglib"
| xmlns:j4j="http://javascript4jsf.dev.java.net/"
| xmlns:gekko="http://gekkoTagLibs.com">
|
| <head></head>
| <body>
| <h:form id="searchCriteria" >
| <rich:panel>
| <f:facet name="header">
| <h:outputText value="Factor for Category/Subcategory Enquiry (TLONL999)"></h:outputText>
| </f:facet>
|
| <rich:panel>
| <h:messages globalOnly="true"/>
| </rich:panel>
|
| <h:panelGrid columns="3">
| <h:outputText value="Category:" styleClass="inputLabel"></h:outputText>
| <h:selectOneMenu id="categoryFilter" value="#{catSubcatEnquiryActionBean.categoryCode}" converter="gekkoGenericObjectConverter">
| <s:selectItems value="#{categories}" var="category" noSelectionLabel="none"
| label="#{category.name}"/>
| </h:selectOneMenu>
| <h:message for="categoryFilter"></h:message>
| <h:outputText value="Subcategory:" styleClass="inputLabel"></h:outputText>
| <h:selectOneListbox id="subcategoryFilter">
| </h:selectOneListbox>
| <h:message for="subcategoryFilter"></h:message>
| <h:outputText value="Date:" styleClass="inputLabel"></h:outputText>
| <rich:calendar id="calendarFilter"
| showInput="true"
| enableManualInput="true"
| datePattern="#{catSubcatEnquiryActionBean.dateFormat}"
| currentDate="#{catSubcatEnquiryActionBean.currentDate}"
| value="#{catSubcatEnquiryActionBean.dateFilter}"
| converter="gekkoDateConverter"
| >
| </rich:calendar>
| <h:message id="calendarErrors" for="calendarFilter"></h:message>
| </h:panelGrid>
|
| </rich:panel>
|
| <h:commandButton id="formSubmit" type="submit" value="Search" action="#{catSubcatEnquiryActionBean.doSearch}">
| <gekko:defaultAction/>
| </h:commandButton>
|
| </h:form>
|
| </body>
| </html>
|
The converter
| package gekko.web.converter;
|
| import gekko.domain.PersistentEntity;
| import gekko.domain.reference.ltl.CategoryCode;
|
| import javax.faces.component.UIComponent;
| import javax.faces.context.FacesContext;
| import javax.faces.convert.Converter;
| import javax.faces.convert.ConverterException;
|
| import com.sun.faces.util.MessageFactory;
|
| import org.jboss.seam.jsf.ListDataModel;
|
| public class GenericObjectConverter implements Converter {
|
| /**
| * <p>The standard converter id for this converter.</p>
| */
| public static final String CONVERTER_ID = "gekko.web.converter.GenericObjectConverter";
|
| /**
| * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
| * the conversion to <code>Date</code> fails. The message format
| * string for this message may optionally include the following
| * placeholders:
| * <ul>
| * <li><code>{0}</code> replaced by a <code>String</code> whose value
| * is the label of the input component that produced this message.</li>
| * </ul></p>
| */
| public static final String NO_CLASS_SPECIFIED =
| "gekko.web.converter.GenericObjectConverter.NOCLASS";
|
| /**
| * <p>The message identifier of the {@link javax.faces.application.FacesMessage} to be created if
| * the conversion of the <code>DateTime</code> value to
| * <code>String</code> fails. The message format string for this message
| * may optionally include the following placeholders:
| * <ul>
| * <li><code>{0}</code> replaced by a <code>String</code> whose value
| * is the label of the input component that produced this message.</li>
| * </ul></p>
| */
| public static final String INVALID_CLASS =
| "gekko.web.converter.GenericObjectConverter.INVALIDCLASS";
|
| @Override
| public Object getAsObject(FacesContext context, UIComponent component,
| String value) {
|
| try {
|
| for(UIComponent comp : component.getChildren()) {
|
| ListDataModel objectList = (ListDataModel)comp.getValueExpression("value").getValue(context.getELContext());
| objectList.setRowIndex(0);
| while (objectList.isRowAvailable()) {
| CategoryCode currentCategory = (CategoryCode)objectList.getRowData();
| if (currentCategory.getId().toString().equals(value)) {
| return currentCategory;
| }
| objectList.setRowIndex(objectList.getRowIndex() + 1);
| }
| }
| } catch (ConverterException e) { // NOPMD
| throw e;
| } catch (Exception e) {
| throw new ConverterException(e);
| }
|
| return null;
| }
|
| @Override
| public String getAsString(FacesContext context, UIComponent component,
| Object value) {
|
| String id;
|
| try {
|
| if (value == null) {
| return "";
| }
|
| id = ((PersistentEntity)value).getId().toString();
| return id;
|
| } catch (ConverterException e) {
| throw new ConverterException(MessageFactory.getMessage(
| context, INVALID_CLASS,
| MessageFactory.getLabel(context, component)), e);
| } catch (Exception e) {
| throw new ConverterException(MessageFactory.getMessage(
| context, INVALID_CLASS,
| MessageFactory.getLabel(context, component)), e);
| }
| }
|
| }
|
This actually works and updates my bean etc etc... so I will use this if there are no better solutions. I will look into this Stateful idea and see what affect that has.
But I would REALLY like it if I could make the noSelectionLabel the default selection in the selectOneMenu
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4098640#4098640
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4098640
More information about the jboss-user
mailing list