JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt

Dieses Thema JSF - (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt im Forum "Web Tier" wurde erstellt von Pommes9485, 13. Juni 2016.

Thema: (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Guten Tag, ich sammle jetzt seit einiges Wochen erste Erfahrungen mit Java EE und JSF und bin bereits mitten drinne...

  1. Guten Tag,

    ich sammle jetzt seit einiges Wochen erste Erfahrungen mit Java EE und JSF und bin bereits mitten drinne in meiner Applikation. Ich habe bereits ein selectOneMenu eingebaut, welches auch funktioniert, bei dem 2. mache ich aber anscheinend irgendwas falsch. Folgendes Szenario:
    Der Nutzer wählt einen Piloten aus, jeder Pilot hat unterschiedliche Slots, für welche dann wieder ein Upgrade ausgewählt werden kann.
    Wenn ich jetzt einen Piloten wähle, erscheint ein Feld mit mehreren SelectOneMenus, welche jeweils einen Slot bedienen.
    Blöderweise wird die value des selectOneMenus eines Slots jedoch nicht geändert. Hier ist mein (hoffentlich) relevanter Code, wenn ihr mehr braucht, sagt einfach Bescheid!

    Code (Text):
    <c:forEach  items="#{newsetup.upgradeSlots}" varStatus="status" var="upgradeSlot">
                        <h:form>
                        <p:selectOneMenu id="box#{status.index}" value="#{newsetup.upgradeSlots[status.index].upgrade}" converter="#{upgradeConverter}" var="upgradeItem" filter="true" filterMatchMode="contains" >
                            <p:ajax process="@this" event="change" update="@this" />
                            <f:selectItem itemLabel="#{upgradeSlot.type}" itemValue=""/>
                            <f:selectItems value="#{newsetup.getUpgradesForSlot(upgradeSlot)}" var="u" itemLabel="#{u.name}" itemValue="#{u}"/>
                            <p:column>
                                <h:outputText value="#{upgradeItem.name}"/>
                            </p:column>
                        </p:selectOneMenu>

                        <p:graphicImage id="image#{status.index}" src="resources/images/#{newsetup.upgradeSlots[status.index].upgrade.image}"/>
                        </h:form>
                    </c:forEach>
    NewSetupController(newssetup):

    Hier wird im Prinzip nur upgradeSlots durchgereicht, eine Array von UpgradeSlot. Diese Klasse enthält den Typen, eine ID und ein Objekt der Klasse Upgrade. Allerdings wird upgrade in keinem der UpgradeSlots gesetzt, warum auch immer. Die UpgradeSlots gibt es hier:

    Code (Text):

    @ManagedBean(name="upgradesService", eager = true)
    @SessionScoped
    public class UpgradesService {
        @EJB
        Queries db;

        private UpgradeSlot[] upgradeSlots;

        @PostConstruct
        public void init() {
            System.out.println("New Upgrade Service");
        }
        public void setPilot(String name)
        {
            System.out.println("Set PILOT called " + name);
            upgradeSlots = db.getUpgradesForPilot(name).toArray(new UpgradeSlot[0]);

        }
        public void setUpgradeSlots(UpgradeSlot[] s)
        {
            upgradeSlots = s;
        }
        public UpgradeSlot[] getUpgradeSlots()
        {

            return upgradeSlots;
        }
     
    In der Array ist auch alles drinne. Die Menus enhalten die richtigen Items, die ich wählen kann. Allerdings werden die Werte nicht in der Bean gesetzt, warum das so ist, verstehe ich eben nicht. Alle Beans hier sind SessionScoped.

    Ist einiges, ich würde mich freuen, wenn einer die Geduld hat, sich damit auseinanderzusetzen, ich komme einfach nicht weiter.

    Danke schon mal!
     
  2. Vielleicht hilft dir das Java-Tutorial weiter. Hier klicken --> (Klick)