Probleme mit Facelets und if foreach und when

Status
Nicht offen für weitere Antworten.

thajek

Mitglied
Bitte den anderen Thread löschen

Hallo ich habe folgende Problem:

Kurz zum aufbau ich habe eine list mit SearchType objecten diese iteriere ich mit eine c:foreach schleife durch. In der foreach schleife frage ich mit c:if oder c:when den type ab und verändere demensprechen das ausehen.
Die JSF läuft als portlet in einem BenutzerPortal von Novell

und zwar wird die anzeige durch die c:foreach und c:if variable generiert wenn ich nun zwei inputText habe und einen davon lösche kommt es zu einem fehler und zwar wird die variable i zwar in der foreach schleife richtig hochgezählt aber im c:when block nochmals um einen inkrementiert. Dies geschieht allerdings nur wenn ich ein inputText lösche das ein nicht String type hatte.

Das heisst ich füge ein neue h:inputText hinzu welches an ein Date object gebunden wird, nun lösche ich den h:inputText der über diesen ist. Intern (durch Debuggen getestet) kommt es zu keinen fehler die Liste mit den Objecten wird richtig veringert. Doch troztdem kommt es zu dem Fehler das die variable i in den c:while oder eben c:if um eins höher ist als sie sein sollten

Das komische ist es passiert nur wenn der h:inputText (der keine String bindung hat) unterhalb des inputTextes ist. Zudem kommt dieses problem nicht vor wenn ich die h:inputText nur mit String objecten Binde

Wenn ich mir die variable i ausgeben lasse wird sie wie folgt ausgegeben

Ablauf
foreach i = 0
when i = 1
danach wieder i=0

auserhalb von when ist die variable i so wie sie sein sollte

es sieht auch so aus als ob das ein problem vom Framework ist

In der Klasse search (ein kleiner teil)
Code:
public void deleteSearch(int item)
   {
      list.remove(item);
   }
   public void addSearch()
   {
      SearchType tempSearchType;
      String tempType = getTypeByName(newAttribute);
      Attribute tempAttr = getAttributeByName(newAttribute);
      if(tempType.equals("date") || tempType.equals("unixtimestamp"))
      {
         tempSearchType = new SearchType(new Date(),tempAttr,"=var");
      }
      else if(tempType.equals("boolean"))
      {
         tempSearchType = new SearchType(Boolean.valueOf(false),tempAttr,"=var*");
      }
      else if(tempType.equals("int"))
      {
         tempSearchType = new SearchType(Integer.valueOf(0),tempAttr,"=var*");
      }
      else
      {
         tempSearchType = new SearchType("test",tempAttr,"=var*");
      }
      list.add(tempSearchType);
   }
In der Klasse searchType (ein kleiner teil)
Code:
   public String getString()
   {
      if(attr instanceof String)
      {
         return (String) attr;
      }
      else
      {
         return null;
      }
   }
   
   public Date getDate()
   {
      if(attr instanceof Date)
      {
         return (Date) attr;
      }
      else
      {
         return null;
      }
   }
list.jsp
Code:
 <h:panelGrid columns="4" >
         <c:forEach begin="0" end="#{controller.search.searchSize}" var="i" >
               <c:set value="#{controller.search.list[i]}" var="search"/>
               <c:set value="#{search.attribute.type}" var="type"/>
             <c:choose>
               <c:when test="#{type == 'int'}">
                  <h:inputText value="#{search.int}"/>
                  <h:outputText value="#{search.attribute.displayName}" />
                  <h:selectOneMenu  value="#{search.criterion}">
                           <f:selectItems value="#{search.criterionByType}" />
                  </h:selectOneMenu>
                  <h:commandButton class="goeUserInPortletCommandButton"  id="searchDelete#{i}"  value="löschen"
                     actionListener="#{controller.deleteSearch}"/>
               </c:when>
               <c:when test="#{type == 'boolean'}">
                  <h:inputText value="#{search.boolean}"/>
                  <h:outputText value="#{search.attribute.displayName}" />
                  <h:selectOneMenu  value="#{search.criterion}">
                           <f:selectItems value="#{search.criterionByType}" />
                  </h:selectOneMenu>
                  <h:commandButton class="goeUserInPortletCommandButton"  id="searchDelete#{i}" value="löschen"
                     actionListener="#{controller.deleteSearch}"/>
               </c:when>
               <c:when test="#{type == 'date' or type == 'unixtimestamp'}">
                  <t:inputDate
                        value="#{search.date}" popupCalendar="false">
                  </t:inputDate>
                  <h:inputText value="#{controller.search.list[i].date}"/>
                  <h:selectOneMenu  value="#{search.criterion}">
                           <f:selectItems value="#{search.criterionByType}" />
                  </h:selectOneMenu>
                  <h:outputText value="#{controller.search.list[i].attribute.displayName}" />
                  <h:commandButton class="goeUserInPortletCommandButton"  id="searchDelete#{i}" value="löschen"
                     actionListener="#{controller.deleteSearch}"/>
               </c:when>
               <c:when test="#{type == 'string'}">
                  <h:inputText value="#{search.string}"/>
                  <h:selectOneMenu  value="#{search.criterion}">
                     <f:selectItems value="#{search.criterionByType}"/>
                  </h:selectOneMenu>
                  <h:outputText value="#{search.attribute.displayName}">
                  </h:outputText>
                  <h:commandButton class="goeUserInPortletCommandButton"  id="searchDelete#{i}"  value="löschen" actionListener="#{controller.deleteSearch}"/>
               </c:when>
            </c:choose>
               </c:forEach>
          <h:selectOneMenu id="searchtype" value="#{controller.search.linkage}">
            <f:selectItem itemValue="and" itemLabel="AND" />
            <f:selectItem itemValue="or" itemLabel="OR" />
         </h:selectOneMenu>
         <h:selectOneMenu value="#{controller.search.newAttribute}">
            <f:selectItems value="#{controller.selectAttributes}" />
         </h:selectOneMenu>
         <h:commandButton class="goeUserInPortletCommandButton" disabled="#{editable}" value="hinzufügen"
                              actionListener="#{controller.addSearch}"/>
         <h:commandButton class="goeUserInPortletCommandButton" action="#{controller.searchUsers}" value="Suchen" />               
      
</h:panelGrid>
 

JimPanse

Bekanntes Mitglied
Hallo erstmal,

also ich arbeite mit JSF und Portlets jetzt nen hlbes Jahr und kann nur davon abraten JSF und JSTL zu mischen!

Ich würde deine List in eine <h:datatable> packen und die Operationen auf die Liste kannst du dann ganz einfach über deine Bean machen, in dem du ein Komponenten Binding verwendest!

BSP.

import javax.faces.component.html.HtmlDataTable;

class DeineBean{

private HtmlDataTable deineTable;
private List<Item> liste;
private Item chItem;

public getRowData(){
Item item2Remove = (Item) deineTable.getRowData();
liste.remove(item2Remove);
}

}


JSF QellText:

<h:datatable
value="#{DeineBean.liste}"
binding="#{DeineBean.deineTable}"
var="liste">
<h:column>
...Attribute des Item
</h:column>

</h:datatable>


So ich hoffe ich hab deine Frage ungefähr verstanden und auch dir weiterhelfen können.

MfG
 

JimPanse

Bekanntes Mitglied
Soory vergesse immer die Code Tags zu verwenden:


Code:
import javax.faces.component.html.HtmlDataTable; 

class DeineBean{ 

private HtmlDataTable deineTable; 
private List<Item> liste; 
private Item chItem; 

    public getRowData(){ 
        Item item2Remove = (Item) deineTable.getRowData(); 
        liste.remove(item2Remove); 
    } 

} 


JSF QellText: 

<h:datatable 
value="#{DeineBean.liste}" 
binding="#{DeineBean.deineTable}" 
var="liste"> 
<h:column> 
...Attribute des Item 
</h:column> 

</h:datatable>
 

thajek

Mitglied
Danke für die antwort, das problem ist viel mehr das ich in der list variable h:inputText und zbp t:inputDate wechseln möchte und das geht leider so weit ich das übersehe nur mit jstl c:if oder c:when da ich in eine h:dataTable auch kein c:if benutzen kann da das komplett versagt. Ich habe es jetzt auch so gemacht das ich nur h:inputText verwende und eigendlich die c:foreach schleife nichtmehr brauche und ein h:dataTable nehmen könnte habe da aber das problem das ich eben nicht verschiedene ausehen erstellen kann.

Dazu kommt noch das ich es nicht hinbekommen habe mit facelets renderer zu scheiben welches mir auch das problem lösen würde. Vieleicht weiss ja jemand wo eine gut beschreibung ist oder wo der unterschied ligt zwischen einenm normalem renderer in jsf und unter facelets
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Probleme mit Apache MyFaces 2 und ICEFaces Facelets Allgemeines EE 1
D Probleme beim Umstieg auf Jakarta EE Allgemeines EE 5
Dimax JSP Probleme mit Java in JSP Allgemeines EE 21
OnDemand Performance Probleme wegen vieler Objekte Allgemeines EE 3
B @Startup - FileWatcher - Probleme beim Hochfahren des Servers Allgemeines EE 4
Psypsy Spring Probleme mit Datenzugriff Allgemeines EE 5
D Apache POI Probleme mit Daten(Datum) die aus Formeln entstehen Allgemeines EE 3
T Probleme mit File renameTo bzw. File delete @@ Allgemeines EE 3
F Probleme mit JSF und ManagedBean Allgemeines EE 3
B Probleme mit Templates in einem Webprojekt Allgemeines EE 6
Fu3L Probleme beim Einrichten Allgemeines EE 3
A Probleme bei der Einbindung eines Liferay Portalserver (Glassfish) Allgemeines EE 7
S Datenbankzugriff (Probleme mit Cache?!) Allgemeines EE 8
K Probleme mit Enterprise Anwendung Allgemeines EE 5
D Probleme mit Cactus Allgemeines EE 9
F <security-constraint> Probleme Allgemeines EE 2
G Probleme im Tomcat - loading WebappClassLoader Allgemeines EE 3
T Probleme mit ApplikationClient mit Sicherheitsanmeldung! Allgemeines EE 2
G Probleme mit dem Klassenpfad nach dem deployment Allgemeines EE 2
Q Probleme bei einbinden von RichFaces. Allgemeines EE 10
V Bildupload probleme Allgemeines EE 2
T Probleme mit Komplexerer ejb-ql Abfrage! Allgemeines EE 2
R EJB Client: Probleme mit der Client.jar Allgemeines EE 2
M Probleme mit Leerzeichen bei HtmlOutputLink Allgemeines EE 5
K probleme mit <h:dataTable> Allgemeines EE 2
M probleme mit client server kommunikation Allgemeines EE 3
S Probleme mit struts - ActionServlet Allgemeines EE 6
E BackingBean Probleme Allgemeines EE 2
K JBoss AS & IDE Probleme Allgemeines EE 2
T Probleme beim Einsatz von J2EE / JBoss Allgemeines EE 4
Ö Spring, Probleme mit FlowScope und HttpServletRequest Allgemeines EE 2
J Probleme mit Struts Allgemeines EE 3
DaRolla Probleme mit Verzeichnissen (Servlet, JSP, Tomcat) Allgemeines EE 8
G Probleme mit ResultSet Allgemeines EE 9
L Probleme mit Kompilierung von JNDI Allgemeines EE 2
K Internet Explorer MIME Type Probleme Allgemeines EE 2
M Probleme beim Performancetuning des Servlets Allgemeines EE 2
G Probleme mit Validierung (Struts, validation.xml) Allgemeines EE 4
G Mehrere Probleme mit Servlets/Java Allgemeines EE 15
W Tomcat Probleme Allgemeines EE 7
FsMarine Probleme beim ausführen von JSP dateien unter Tomcat Allgemeines EE 4
E JBoss 4.0.2 - Probleme mit der Spezifikation Allgemeines EE 3
R Probleme mit Tutorial Allgemeines EE 4
M Probleme bei Aufruf von JSPs in Unterverzeichnissen Allgemeines EE 2
M Probleme beim Webservice Deployment(Sun ApplicationServer) Allgemeines EE 2
H JONAS 4.1.4 Start Probleme Allgemeines EE 2
O Probleme mit Aktualität bei JBOSS Allgemeines EE 4
A Probleme mit J2EE und Tomcat Allgemeines EE 7
R Inputstream Probleme Allgemeines EE 11
P Probleme mit File renameTo bzw. File delete Allgemeines EE 3
F Probleme mit Eclipse/JBoss Allgemeines EE 6
B Facelets + EJB3 Allgemeines EE 3
G Facelets Templating Allgemeines EE 4
N JSF + Facelets: Datatable wird nicht angezeigt Allgemeines EE 1
F Umlaute und Facelets Allgemeines EE 4
F Konvertierung JSF -> facelets (templating) Allgemeines EE 1
S facelets - umlaute darstellen Allgemeines EE 4
W Spring mit JSF und Facelets? Allgemeines EE 1
A Listen Ausgabe ohne forEach - JSTL Allgemeines EE 5
S JSTL foreach rückwärts? Allgemeines EE 2
J c:forEach und var="bla" ? Allgemeines EE 4
E forEach und varStatus? Allgemeines EE 3
E forEach und index? Allgemeines EE 2
E forEach Loop EL - Frage Allgemeines EE 2
S JSTL Foreach Allgemeines EE 3
S JSTL Foreach Allgemeines EE 2
T JSTL + Struts (inkl.Hibernate) -> forEach Problem Allgemeines EE 6
S c:foreach - Problem bei Arrays Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben