Download
Entwicklung
Konto
Download
Entwicklung
Anmelden
Vergessen Konto/Passwort
Konto erstellen
Sprache
Hilfe
Sprache
Hilfe
×
Anmelden
Anmeldename
Passwort
×
Vergessen Konto/Passwort
Übersetzungsstatus von Deutsch
Kategorie:
Software
Personen
PersonalForge
Magazine
Wiki
Suche
OSDN
>
Finden Software
>
System
>
Seasar
>
Ticket-Liste / Suche
>
Ticket #7505
Seasar
Beschreibung
Projekt Zusammenfassung
Entwickler-Dashboard
Web-Seite
Entwickler
Bildergalerie
RSS Feed-Liste
Aktivität
Statistiken
Historie
Downloads
Aller Releases-Liste
Statistiken
Quellcode
Quellcode-Repositorys-Liste
CVS
Repository ansehen
Ticket
Ticket-Liste
Liste der Meilensteine
Typenliste
Komponentenliste
Liste der zuletzt benutzten Tickets/RSS
Neue Ticket abschicken
Dokumente
Kommunikation
Foren
Forum-Liste
Mailinglisten
Alle Mailinglisten
Neuigkeiten
Ticket #7505
Ticket-Liste
Neue Ticket abschicken
RSS
[Seasar-user:2812] ...ForEach.getCurrent
Eröffnet am:
2005-11-15 11:36
Letztes Update:
2005-11-25 18:52
beobachte
ON
OFF
Auswertung:
manhole
Verantwortlicher:
manhole
Typ:
S2JSF
Status:
Geschlossen
Komponente:
(Keine)
Meilenstein:
(Keine)
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine
Details
Antworten
内容が長さの違うリスト(lla, llb)を含むリスト(ll)を展開して
表示した後、長い方のリスト(lla)に含まれて、短い方のリスト
には含まれない位置の値をブラウザで修正して submit すると
org.seasar.jsf.component.ForEach.getCurrentRow で
java.lang.ArrayIndexOutOfBoundsException が発生します。
ちょっと分りにくい説明で申し訳ないですが、添付するソースで
a3 と表示される部分を変更して submit すると例外が発生し
ます。
java ソースで llb.add(new HogeDto("b3")); のコメントを
外し、
lla と llb の長さを同じにしてやるとこの例外は発生しません。
違う長さのリストを含めてはいけないといった制約があるの
でしょうか?
# だとすると結構、厳しい...
尚、検証は S2JSF 1.0.8 で行ないました。
- 例外情報 ----------
[exception]
javax.servlet.ServletException: 2
javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112)
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:47)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
[root cause]
java.lang.ArrayIndexOutOfBoundsException: 2
org.seasar.jsf.component.ForEach.getCurrentRow(ForEach.java:99)
org.seasar.jsf.component.ForEach.setRowIndex(ForEach.java:79)
org.seasar.jsf.component.ForEach.broadcast(ForEach.java:131)
org.seasar.jsf.component.ForEach.broadcast(ForEach.java:133)
org.seasar.jsf.component.S2UIViewRoot.broadcastForPhase(S2UIViewRoot.java:104)
org.seasar.jsf.component.S2UIViewRoot.processValidators(S2UIViewRoot.java:54)
org.seasar.jsf.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:159)
org.seasar.jsf.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:81)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:109)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112)
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:47)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
- hoge.html ----------
<html xmlns:m="http://www.seasar.org/maya">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=Windows-31j" />
<title>Hoge</title>
</head>
<body>
<form>
<span m:inject="s:forEach"
m:items="#{hogeListDto.hogeList}" m:var="e" m:varindex="i">
<span m:inject="s:forEach" m:items="#{e}" m:var="ee"
m:varindex="ii">
<input type="text" m:value="#{ee.hoge}" />
</span>
<br />
</span>
<input type="submit" value="submit"/>
</form>
</body>
</html>
- hogeDto.java ----------
package examples.jsf.dto;
public class HogeDto {
private String hoge;
public HogeDto(){}
public HogeDto(String hoge){
this.hoge = hoge;
}
public String getHoge() {
return hoge;
}
public void setHoge(String hoge) {
System.out.println(hoge);
this.hoge = hoge;
}
}
- hogeListDto.java ----------
package examples.jsf.dto;
import java.util.List;
import java.util.LinkedList;
public class HogeListDto {
private List hogeList;
public void setInit(String dummy){
System.out.println("HogeListDto.setInit() is
called.");
LinkedList lla = new LinkedList();
lla.add(new HogeDto("a1"));
lla.add(new HogeDto("a2"));
lla.add(new HogeDto("a3"));
LinkedList llb = new LinkedList();
llb.add(new HogeDto("b1"));
llb.add(new HogeDto("b2"));
// llb.add(new HogeDto("b3")); ここのコ
メントを外すと例外は発生しない
LinkedList ll = new LinkedList();
ll.add(lla);
ll.add(llb);
hogeList = ll;
}
public List getHogeList() {
return hogeList;
}
public void setHogeList(List hogeList) {
System.out.println("HogeListDto.setHogeList() is called.");
this.hogeList = hogeList;
}
}
- hoge.dicon ----------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD
S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<component name="hogeListDto"
class="examples.jsf.dto.HogeListDto" instance="session" >
<property name="init">"foo"</property>
</component>
</components>
Ticket-Verlauf (3/3 Historien)
2005-11-18 17:40
Aktualisiert von:
manhole
Verantwortlicher
Update from
(Keine)
to
manhole
2005-11-21 14:26
Aktualisiert von:
manhole
Ticket Close date
is changed to
2005-11-21 14:26
Status
Update from
Offen
to
Geschlossen
Kommentar
Antworten
Logged In: YES
user_id=10369
version 1.0.9を修正しました。
次バージョンから反映されます。
2005-11-25 18:52
Aktualisiert von:
manhole
Ticket Close date
is changed to
2005-11-25 18:52
Kommentar
Antworten
Logged In: YES
user_id=10369
[Seasar-user:2502][Seasar-user:2932]も同様の原因。
Dateianhangliste (
0
)
Dateianhangliste
Keine Anhänge
Bearbeiten
Kommentar hinzufügen
You are not logged in.
I you are not logged in, your comment will be treated as an anonymous post. »
Anmelden
Kommentar hinzufügen
Vorschau
Abschicken
表示した後、長い方のリスト(lla)に含まれて、短い方のリスト
には含まれない位置の値をブラウザで修正して submit すると
org.seasar.jsf.component.ForEach.getCurrentRow で
java.lang.ArrayIndexOutOfBoundsException が発生します。
ちょっと分りにくい説明で申し訳ないですが、添付するソースで
a3 と表示される部分を変更して submit すると例外が発生し
ます。
java ソースで llb.add(new HogeDto("b3")); のコメントを
外し、
lla と llb の長さを同じにしてやるとこの例外は発生しません。
違う長さのリストを含めてはいけないといった制約があるの
でしょうか?
# だとすると結構、厳しい...
尚、検証は S2JSF 1.0.8 で行ないました。
- 例外情報 ----------
[exception]
javax.servlet.ServletException: 2
javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112)
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:47)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
[root cause]
java.lang.ArrayIndexOutOfBoundsException: 2
org.seasar.jsf.component.ForEach.getCurrentRow(ForEach.java:99)
org.seasar.jsf.component.ForEach.setRowIndex(ForEach.java:79)
org.seasar.jsf.component.ForEach.broadcast(ForEach.java:131)
org.seasar.jsf.component.ForEach.broadcast(ForEach.java:133)
org.seasar.jsf.component.S2UIViewRoot.broadcastForPhase(S2UIViewRoot.java:104)
org.seasar.jsf.component.S2UIViewRoot.processValidators(S2UIViewRoot.java:54)
org.seasar.jsf.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:159)
org.seasar.jsf.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:81)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:109)
org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:112)
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:47)
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:45)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
- hoge.html ----------
<html xmlns:m="http://www.seasar.org/maya">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=Windows-31j" />
<title>Hoge</title>
</head>
<body>
<form>
<span m:inject="s:forEach"
m:items="#{hogeListDto.hogeList}" m:var="e" m:varindex="i">
<span m:inject="s:forEach" m:items="#{e}" m:var="ee"
m:varindex="ii">
<input type="text" m:value="#{ee.hoge}" />
</span>
<br />
</span>
<input type="submit" value="submit"/>
</form>
</body>
</html>
- hogeDto.java ----------
package examples.jsf.dto;
public class HogeDto {
private String hoge;
public HogeDto(){}
public HogeDto(String hoge){
this.hoge = hoge;
}
public String getHoge() {
return hoge;
}
public void setHoge(String hoge) {
System.out.println(hoge);
this.hoge = hoge;
}
}
- hogeListDto.java ----------
package examples.jsf.dto;
import java.util.List;
import java.util.LinkedList;
public class HogeListDto {
private List hogeList;
public void setInit(String dummy){
System.out.println("HogeListDto.setInit() is
called.");
LinkedList lla = new LinkedList();
lla.add(new HogeDto("a1"));
lla.add(new HogeDto("a2"));
lla.add(new HogeDto("a3"));
LinkedList llb = new LinkedList();
llb.add(new HogeDto("b1"));
llb.add(new HogeDto("b2"));
// llb.add(new HogeDto("b3")); ここのコ
メントを外すと例外は発生しない
LinkedList ll = new LinkedList();
ll.add(lla);
ll.add(llb);
hogeList = ll;
}
public List getHogeList() {
return hogeList;
}
public void setHogeList(List hogeList) {
System.out.println("HogeListDto.setHogeList() is called.");
this.hogeList = hogeList;
}
}
- hoge.dicon ----------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD
S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
<components>
<component name="hogeListDto"
class="examples.jsf.dto.HogeListDto" instance="session" >
<property name="init">"foo"</property>
</component>
</components>