Wiam serdecznie,
chciałabym się zapytać jak wyświetlić listę za pomocą separatora #{...} w JSF? Mój kod pliku index.xhtml przedstawia się następująco:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<h3>#{msgs.naglowek}</h3>
<p>
<h:outputFormat value="#{msgs.aktualnyWynik}">
<f:param value="#{quizBean.wynik}"/>
</h:outputFormat>
</p>
<p>#{msgs.zgadnacNext}</p>
<p>#{quiz.aktualny.sekwencja}</p>
<p>#{msgs.odpowiedz}
<h:inputText value="#{quizBean.odpowiedz}"/>
</p>
<p><h:commandButton value="#{msgs.next}"/></p>
</h:form>
</h:body>
</html>
Klasy które odpowiadają za wyświelenie elementów tablicy , przedstawią się następująco:
package corejsf;
import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class QuizBean implements Serializable {
private ArrayList<ProblemBean> problems = new ArrayList<ProblemBean>();
private int aktualnyIndeks;
private int wynik;
public QuizBean() {
problems.add(new ProblemBean(new int[]{3, 1, 4, 1, 5}, 9));
problems.add(new ProblemBean(new int[]{1, 1, 2, 3, 5}, 8));
problems.add(new ProblemBean(new int[]{1, 4, 9, 16, 25}, 36));
problems.add(new ProblemBean(new int[]{2, 3, 5, 7, 11}, 13));
problems.add(new ProblemBean(new int[]{1, 2, 4, 8, 16}, 32));
}
public void setProblems(ArrayList<ProblemBean> nowaWartosc) {
problems = nowaWartosc;
aktualnyIndeks = 0;
wynik = 0;
}
public int getWynik() {
return wynik;
}
public ProblemBean getAktualny() {
return problems.get(aktualnyIndeks);
}
public String getOdpowiedz() {
return "";
}
public void setOdpowiedz(String nowaWartosc) {
try {
int odpowiedz = Integer.parseInt(nowaWartosc.trim());
if (getAktualny().getRozwiazanie() == odpowiedz) {
wynik++;
}
aktualnyIndeks = (aktualnyIndeks + 1) % problems.size();
} catch (NumberFormatException ex) {
}
}
}
package corejsf;
import java.io.Serializable;
import java.util.ArrayList;
class ProblemBean implements Serializable {
private ArrayList<Integer> sekwencja;
private int rozwiazanie;
public ProblemBean() {
}
public ProblemBean(int[] values, int rozwiazanie) {
sekwencja = new ArrayList<Integer>();
for (int i = 0; i < values.length; i++) {
sekwencja.add(values[i]);
}
this.rozwiazanie = rozwiazanie;
}
public ArrayList<Integer> getSekwencja() {
return sekwencja;
}
public void setSekwencja(ArrayList<Integer> nowaWartosc) {
sekwencja = nowaWartosc;
}
public int getRozwiazanie() {
return rozwiazanie;
}
public void setRozwiazanie(int nowaWartosc) {
this.rozwiazanie = nowaWartosc;
}
}
Metoda getAktualny() powinna spowodowac wyświelenie, ale jednak tego nie robi. Próbowałam przez :
<p>#{QuizBean.sekwencja}</p>
<p>#{QuizBean.aktualny}</p>
<p>#{QuizBean.aktualny.sekwencja}</p>
ale bez rezultatu :(
Będę bardzo wdzieczna o wskazówki jak wyświetlić listę w taki sposób:
[3, 1, 4, 1, 5]