JSF inputText in dataTable – HTML / XHTML – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JSF inputText in dataTable – HTML / XHTML – Fórum – Programujte.comJSF inputText in dataTable – HTML / XHTML – Fórum – Programujte.com

 

Michal
~ Anonymní uživatel
683 příspěvků
18. 7. 2008   #1
-
0
-

Vím že to asi patří jinam, ale už jsem zoufalý:

Pokouším se vytvořit tabulku položek z databáze. U každé z nich mám tlačítko smazat. Jakým způsobem nejlépe předat backing beaně id položky, ke které se akce vztahuje? Tohle jsem vyřešil, ale zajímalo by mě, jak byste to řešili vy.

Na co ale nemůžu přijít:
U každé položky mám taky inputbox a tlačítko update. Inputbox mám pomocí valuebindingu vázaný na hodnoty vlastností jednotlivých položek. Chtěl bych aby po úpravě inputboxu a kliknutí na tlačítko update se nová hodnota uložila do databáze.
Tak jak to mám to funguje pouze u posledního řádku v tabulce. K zavolání update metody dojde vždycky, ale u jiného než posledního řádku nedojde k aktualizaci vázané hodnoty v beaně, dokonce ani k volání valuechangelisteneru. Čím to může být?

Pokud byste mi někdo chtěl vysvětlit, jak funguje valuebinding (např. při vázání více polí na jednu proměnnou) budu rád.

Děkuji!

Můj kód:



<h:dataTable var="hudebnik" value="Bean.hudebnici">
<h:column>
<h:form>
<h:inputText valueChangeListener="#{hudebnik.change}" value="#{hudebnik.vstup}"/>
<h:commandButton value="pridat" action="#{hudebnik.pridej}"/>
</h:form>
</h:column>
</h:dataTable>

public class Hudebnik {

private String vstup;

public void change(ValueChangeEvent event) {...}
public void pridej() {...}
[gettery a settery]
}



úplný kód:



<h:dataTable cellpadding="3" rowClasses="lichy,sudy" var="hudebnik" value="#{HudebnikBean.hudebnici}">
<h:column>
<f:facet name="header"><h:outputText value="id"/></f:facet>
<h:outputText value="#{hudebnik.id}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="jméno"/></f:facet>
<h:outputText value="#{hudebnik.jmeno}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="příjmení"/></f:facet>
<h:outputText value="#{hudebnik.prijmeni}"/>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="kapely"/></f:facet>
<h:dataTable var="kapela" value="#{hudebnik.kapely}">
<h:column>
<h:outputText value="#{kapela.jmeno}"/>
</h:column>
</h:dataTable>
</h:column>
<h:column>
<f:facet name="header"><h:outputText value="kapely"/></f:facet>
<h:form>
<h:inputText valueChangeListener="#{hudebnik.value}" value="#{hudebnik.vstup}"/>
<h:commandButton value="přidat" action="#{hudebnik.pridejHudebnika}"/>
</h:form>
</h:column>
</h:dataTable>


HudebnikBean.java

public class HudebnikBean {

@EJB
public HudebnikManagerLocal hudebnikManager;

public HudebnikBean() {
}

public Collection<TableRow> getHudebnici() {
Collection<TableRow> tabulka = new ArrayList<TableRow>();
for (HudebnikEntity hudebnik : hudebnikManager.vratHudebniky())
tabulka.add(new TableRow(hudebnik));
return tabulka;
}

}




[/bold]

public class TableRow {

private Long id;
private String jmeno;
private String prijmeni;
private String vstup;

public void pridejHudebnika() {
System.out.println(id + " " + vstup);
}

public String smazHudebnika() {
return "obnovZobrazeni";
}

public void value(ValueChangeEvent event) {
System.out.println("AHOJ"); // debug info
}

public TableRow() {
super();
}

public TableRow(HudebnikEntity hudebnik) {
super();
this.id = hudebnik.getId();
this.jmeno = hudebnik.getJmeno();
this.prijmeni = hudebnik.getPrijmeni();
this.kapely = hudebnik.getKapely();
this.vstup = new String("Původní text");
}

public Long getId() {
System.out.println("id get " + id); // debug info
return id;
}

public void setId(Long id) {
System.out.println("id set " + id); // debug info
this.id = id;
}

public String getJmeno() {
return jmeno;
}

public void setJmeno(String jmeno) {
this.jmeno = jmeno;
}

public String getPrijmeni() {
return prijmeni;
}

public void setPrijmeni(String prijmeni) {
this.prijmeni = prijmeni;
}

public String getVstup() {
System.out.println("vstup get " + id); // debug info
return vstup;
}

public void setVstup(String vstup) {
System.out.println("vstup set " + id); // debug info
this.vstup = vstup;
}
}




[bold]výpis při prvním načtení stránky

id get 854
vstup get 854
id get 1102
vstup get 1102
id get 1103
vstup get 1103
id get 1152
vstup get 1152



výpis při změně některé z prvních položek a kliknutí na odpovídající tlačítko

854 Původní text
id get 854
vstup get 854
id get 1102
vstup get 1102
id get 1103
vstup get 1103
id get 1152
vstup get 1152



výpis při změně některé z poslední položky a kliknutí na poslední tlačítko

vstup get 1152
AHOJ
vstup set 1152
1152 Nově zadaný text
id get 854
vstup get 854
id get 1102
vstup get 1102
id get 1103
vstup get 1103
id get 1152
vstup get 1152


Je mi jasné, že jelikož nastavuju jméno v konstruktoru na "Původní text", pokaždé se zobrazí ten ůvodní ve všech kolonkách. To je ale pouze pro DEBUG. Jde o to, že kromě poslední kolonky se nevolá setter ani valueChangeListener.
Jak to?

Už si vážně začínám myslet že to je bug v mé implementaci JSF.


Díky každému kdo si to aspoň přečtě :)

Nahlásit jako SPAM
IP: 89.103.35.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

JSF selector label as value — založil Flowy

JSF autentifikacia na tomcat — založil vlado0991

C# SQLCE, nahrání datatable — založil David Roško

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý