Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[JSF] dubble iteratie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey, ik ben bezig met iets te maken in JSF en ik in mijn managed bean heb ik een lijst van objecten. Die objecten bevatten op hun beurt ook een lijst.
Dus nu heb ik deze structuur:
Java:
1
2
3
4
5
6
<c:forEach items="#{basisOpties.locatieLijst.locatieItems}" var="l">
                        <h:outputText value="#{l.naam}"/>
                        <c:forEach items="#{l.locatieItems}" var="li">
                            <h:outputText value="#{li.naam}"/>
                        </c:forEach>
                    </c:forEach>

maar ik krijg de foutmelding:
type
Exception report
message
description
The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "locatieItems"
root cause
java.lang.NumberFormatException: For input string: "locatieItems"
note The full stack traces of the exception and its root causes are available in the Sun Java System Application Server 9.1 logs.


weet iemand hoe ik dit kan doen zodat ik weinig compromisses moet maken en mijn JSF nog steeds dynamisch is

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 21:12

Gonadan

Admin Beeld & Geluid, Harde Waren
Ik heb hier verder niet echt verstand van maar moet het niet zoiets zijn:
Java:
1
2
3
4
5
6
<c:forEach items="#{basisOpties.locatieLijst}" var="l">
                        <h:outputText value="#{l.naam}"/>
                        <c:forEach items="#{l.locatieItems}" var="li">
                            <h:outputText value="#{li.naam}"/>
                        </c:forEach>
                    </c:forEach>

Dus je itereert door je lijst, en daarna pas door de items?

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Topicstarter
idd, met al het testen heb ik het door elkaar geslaan, nu lukt het dus wel. bedankt

Verwijderd

Topicstarter
Met een forEach lukt dit dus, maar als ik de iteratie van JSF gebruik (dataTable) lukt dit dus niet meer, dus een iteratie in een iteratie lukt niet
Java:
1
2
3
4
5
6
7
8
9
10
11
12
<h:dataTable value="#{basisOpties.locatieLijst}" var="l">
                        <h:column>
                            <h:outputText value="#{l.naam}"/>
                        </h:column>
                        <h:column>                        
                            <h:dataTable value="#{l.locatieItems}" var="li">
                                <h:column>
                                    <h:outputText value="#{li.naam}"/>
                                </h:column>
                            </h:dataTable>
                        </h:column>
                    </h:dataTable>

dit dus
ik krijg deze foutmelding:

javax.servlet.ServletException: The class 'org.hibernate.collection.PersistentSet' does not have the property 'naam'.

ik snap dat er een persitentSet gegenereerd wordt door hibernate maar normaal zou het moeten omgezet worden naar een gewone list, met een c:forEach lukt dit wel...

[ Voor 84% gewijzigd door Verwijderd op 22-02-2008 13:58 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 29-10 20:56

Macros

I'm watching...

Je kan een Set niet in een dataTable zetten, het moet een List of array zijn. Dus je moet je entiteit een list laten returnen, direct of mbv een trancient methode.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
dat wist ik niet, tnx (wat is een trancient methode btw?)

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 29-10 20:56

Macros

I'm watching...

Stel je getItems() methode returned normaal een Set<DomainType>, en die heb je gemapped in Hibernate. Dan is de property 'items' gedefinieerd. Als je nou een nieuwe methode getItemsList() zou maken, die je set in een ArrayList kopieert, dan creeer je impliciet een nieuwe property 'itemsList', dat wil je niet, dus markeer je hem Trancient. Je kan ook natuurlijk je getItems methode een List laten returnen.

Java:
1
2
3
4
@Trancient
public List<DomainType> getItemsList() {
   return new ArrayList<DomainType> getItems();
}

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
Nu ben ik hier terug, ik wil dat de middenste items checkboxen worden.
Ik heb deze code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<h:selectManyCheckbox value="#{basisOpties.locatieItemIds}" layout="pageDirection">
    <h:dataTable value="#{basisOpties.locatieLijst}" var="l">
        <h:column>
            <h:outputText value="#{l.naam}"/>
        </h:column>
        <h:column>                        
            <h:dataTable value="#{l.arrayListLocatieItems}" var="li">
                <h:column>
                    <f:selectItem itemValue="#{li.id}" itemLabel="#{li.naam}"/>
                </h:column>
            </h:dataTable>
        </h:column>
    </h:dataTable>
</h:selectManyCheckbox>

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 29-10 20:56

Macros

I'm watching...

Ik ben sinds woensdag pas met JSF bezig, en heb eigenlijk nog niet veel ermee gedaan hoor.
Alleen een simpele test pagina en heel veel documentatie gelezen over Facelets, JSF, Seam en IceFaces. Maar dit zou je denk ik erin moeten zetten:
XML:
1
2
3
<h:column> 
     <h:selectBooleanCheckbox value="#{l.value}"/>
</h.column>

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
hoe werkt dit dan samen met de <h:selectManyCheckbox> tag?
ik krijg nu wel degelijk checkboxes maar ik krijg heel rijen errors
code:
1
sourceId=j_id_id47:j_id_id139:4:j_id_id148:2:j_id_id152[severity=(ERROR 2), summary=(j_id_id47:j_id_id139:4:j_id_id148:2:j_id_id152: An error occurred when processing your submitted information. ), detail=(j_id_id47:j_id_id139:4:j_id_id148:2:j_id_id152: An error occurred when processing your submitted information. )]

[ Voor 56% gewijzigd door Verwijderd op 22-02-2008 15:58 ]


Verwijderd

Topicstarter
niemand die me kan helpen?

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Jouw functionele eis is onduidelijk en jouw code voorbeelden zijn verschrikkelijk.

Wat probeer je te bereiken? Beschrijf dat eens in vorm van woorden die functionele eisen aangeven in plaats van bij elkaar geschraapte en wild gegokte prutsels dat voor JSF code moet doorgaan.

Wilde je een tabel met één checkbox in elke rij? Wilde je een tabel met dezelfde groep checkboxen in elke rij? Wilde je een tabel met telkens een andere groep checkboxen in elke rij?

[ Voor 24% gewijzigd door BalusC op 23-02-2008 10:57 ]


Verwijderd

Topicstarter
Sorry hiervoor, ik zal proberen goed uit te leggen wat ik wil doen

Je hebt dus een lijst met locaties bv de gemeentelijke sporthal en die is onderverdeeld in 5 zalen. bv de judo zaal of de bar of het basketbalveld.
De complexen (vb: sportzaal) worden opgeslaan in de klasse Locatie, de delen van complexen (vb: de bar) worden opgeslaan in de klasse LocatieItem. Nu moet het mogelijk zijn om een lijst te genereren waar je als uitkomst hebt:
Sportcomplex
- bar
- judo zaal
- basketbal veld

Ander complex
- bar
- vergader ruimte

en het moet mogelijk zijn om bv de bar bij het 'Ander complex' te selecteren en de judo zaal en die uitkomst moet opgeslaan worden in mijn managed bean, en dit lukt met niet, meerder items opslaan lukt me wel, maar door die iteratie krijg ik dat niet op het scherm.
Help me mijn JSF te verbeteren door mij tips te geven want ik ben dit aan het leren in het kader van mijn eindproject in school en ik ben er nog maar 2 dagen mee bezig, dus tips zijn zeker welkom.

hopelijk is mijn uitleg nu verstaanbaarder en kan iemand me helpen

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Zoiets wil je dus hebben?
Java Server Faces:
1
2
3
4
5
6
7
8
9
10
<h:dataTable value="#{myBean.locations}" var="location">
    <h:column>
        <h:outputText value="#{location.name}" />
    </h:column>
    <h:column>
        <h:selectManyCheckbox value="#{location.selectedItems}">
            <f:selectItems value="#{location.selectItems}" />
        </h:selectManyCheckbox>
    </h:column>
</h:dataTable>

MyBean
Java:
1
private List<Location> locations; // + getter
Location
Java:
1
2
3
private String name; // + getter
private List<String> selectedItems; // + getter + setter
private List<SelectItem> selectItems; // + getter
Je kunt evt ook je eigen object type als SelectItem value gebruiken ipv String, maar dan moet je een javax.faces.Converter implementeren dat tussen het gewenste object type en String (of Number) kan converteren.

Verwijderd

Topicstarter
bedankt voor je Reply, maar als je dit doet, maak je toch meerdere selectManyCheckbox'es, geeft dit dan geen problemen als je dit wil koppelen aan 1 veld?

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Waarom wil je ze koppelen aan 1 veld dan? In jouw functionele eis zie ik dat niet terug. Je kunt alle geselecteerde items gewoon benaderen via de locaties property in de backing bean.

Verwijderd

Topicstarter
Doordat ik nieuw ben met JSF heb ik hier wel nog een vraagje naar het concept van de gelaagde architectuur. Locatie is een klasse uit mijn domein, wanneer ik velden toeken aan mijn domeinklasses, wordt de koppeling tussen mijn GUI en mijn domein dan niet te groot?
Pagina: 1