1
<tr>
                <td><h2><h:outputText value="Card:" /></h2></td>
                <td>
                    <h:selectOneMenu required="true" requiredMessage="Card not selected" value="#{myBean.card}">
                        <f:selectItem itemValue="#{null}" itemLabel="Please select an Card..." />
                        <f:selectItems value="#{myBean.cards}" var="card" itemLabel="#{card.number} - #{card.currencyCode}#{card.availableBalance}" />
                        <f:ajax render="@form" listener="#{myBean.selectCard}" />
                    </h:selectOneMenu>
                </td>
            </tr>
            <tr>
                <td><h2><h:outputText rendered="#{(myBean.card != null)}" value="Item: " /></h2></td>
                <td>
                    <h:selectOneMenu rendered="#{(myBean.card != null)}" required="true" requiredMessage="Item not selected" value="#{myBean.selectedItem}">
                        <f:selectItem itemValue="#{null}" itemLabel="Please select a Item..." />
                        <f:selectItems value="#{myBean.items}" var="item" itemValue="#{item}" itemLabel="#{item.name}" />
                        <f:ajax render="@form" listener="#{myBean.selectItem}" />
                    </h:selectOneMenu>
                </td>
            </tr>
            <tr>
                <td><h2><h:outputText rendered="#{(myBean.selectedItem != null)}" value="Service ID: " /></h2></td>
                <td><h:outputFormat rendered="#{(myBean.selectedItem != null)}" value="#{myBean.selectedItem.serviceId}" /></td>
            </tr>

When I change value of Items dropdown the it still shows the default item. Here is the bean, but the Card dropdown does work correctly. It does however re-render the page and show all items which are supposed to appear only after the selection of an Item. I looked everywhere on googl, no luck.

@ManagedBean(name = "myBean")
@RequestScoped
public class MyBean {

private Item selectedItem;
private Card card;

    public Item getSelectedItem() {
    return selectedItem;
}

public void setSelectedItem(Item selectedItem) {
    this.selectedItem = selectedItem;
}

public Card getCard() {
    return card;
}

public void setCard(Account card) {
    this.card = card;
}
/*More code*/
}

Here is the converter class. The Card dropdown has as similar converter and that one works as expected but for some reason the Item drom down does not work.

 FacesConverter(forClass=Item.class)
 public class ItemConverter implements Converter {


@Override
public Object getAsObject(
        final FacesContext context,
        final UIComponent component,
        final String value) {
    BillPaymentTransaction transaction = context.getApplication().evaluateExpressionGet(context, "#{itemChooser}", BillPaymentTransaction.class);
    for (Item item : transaction.getItems()) {
        if (String.valueOf(item.getName()).equals(value)) {
            return item;
        }
    }
    throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to Item", value)));
}
@Override
public String getAsString(
        final FacesContext context,
        final UIComponent component,
        final Object value) {
    return ((Item)value).getName();
}
}
Mr E.
  • 11
  • 2

0 Answers0