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!
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:
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!
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:
<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>
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:
@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!