2013-12-09 32 views
11

Sayfamda bir komut listesi listesi oluşturmam gerekiyor, ancak bununla ilgili bir sorunum var. Listeyi request.setAttribute aracılığıyla fasulyemden geçiriyorum ve değerleri her seferinde bir tane elde ettiğimde işe yarayacak gibi görünüyor, ancak bir foreach döngüsünden geçtiğimde, hepsi boş görünüyor (Ve bu nedenle üretiliyor ve bir varsayılan değer 0, "", bildiğim kadarıyla). Herhangi bir yardım büyük takdir edilecektir! Eklenen kodda, foreach döngüsünün dışında düğmeler yaptığımda doğru değerleri alıyorum, ancak döngüyü kendim çalıştırdığımda değil. Liste tamsayı tipindedir ve daha sonra bir java nesnesi olmalıdır (aynı probleme göre). JSF sürüm 2.2'yi kullanarak. Hem logtest() hem de gotoprofile(), ilgi alanı çıktısını yazdırır.JSF'de foreach döngüsünü kullanma

benim fasulye vardır:

@ManagedBean(name="MyProfile") 
@RequestScoped 

Ve benim fasulye benim değişken myInterestList ayarlayın: o zaman, JSF 2 kullanıyorsanız, xhtml sayfanızı değiştirmelisiniz

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);   
session.setAttribute("myInterestProfileName", profileName); 


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> 
<%@ page import="java.util.List,com.jsflogin.stringWithPointer" %> 

<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<f:view> 



<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSF Successfull login</title> 
</head> 
<body> 


    <h:form id="forloop"> 
      <c:set var ="myTempList" value="${myInterestListYay}" scope="session"/> 
      <c:out value="interest list"/><p> 
      <h:commandButton value="#{myInterestListYay[1]}" action="#{MyProfile.logTest}"> 
       <f:setPropertyActionListener target ="#{MyProfile.interestPointer}" value = "#{myInterestListYay[1]}"/> 
      </h:commandButton><p> 


      <ui:repeat var="orly"value="${myInterestListYay}" varstatus="status"> 
       <c:out value="${status.index}"/><h:commandButton value="#{orly}" action="#{MyProfile.logTest}"> 
       <f:setPropertyActionListener target ="#{MyProfile.interestPointer}" value = "#{orly}"/> 
      </h:commandButton><p> 
      </ui:repeat> 
      <c:forEach var="orly" items="${MyProfile.interestsAndPointers}" varStatus="status" > 
       <c:out value="${status.index}"/><c:out value=": "/><c:out value="${orly.stringName}"/><h:commandButton value="go to interest page" action="#{MyProfile.goToInterestProfile}"> 
       <f:setPropertyActionListener target ="#{MyProfile.interestPointer}" value = "#{orly.pointer}"/> 
      </h:commandButton><p> 
      </c:forEach>  
     </h:form> 



    </body> 
    </f:view> 
</html> 
+0

kullanın $ {orly} yerine no {orly} bu hatayı alıyorum –

+0

derlemeye çalışırken. "TLD'ye göre, öznitelik değeri bir degerlendirilmiş değer veya ertelenmiş yöntemdir, ancak belirtilen değer bir $ -ifadesi içerir" – user3058296

cevap

29

yapabilirsiniz ui'yi kullanın:'u tekrarlayın ve facelets'ten daha fazla güzellik alın.

İki çok basit sayfa yaptım, biri JSP ve diğeri XHTML. Talep kapsamında yönetilen bir fasulye kullanırlar. Her ikisi de üst üste üç düğme çalışıyor ve çalışıyor. Başlamak için daha kolay olduğu için Glassfish'i bir sunucu olarak kullandığımı unutmayın. Tomcat (7.x) için jsf-api, jsf-impl (2.x) ve jstl (1.2) lib'lerini sınıf yoluna kopyalamanız gerekebilir.

Bu JSP sayfası: Burada

<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> 
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<f:view> 
    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h:form> 
      <c:forEach var="item" items="#{cart.items}"> 
      <h:commandButton value="#{item}"/> 
      </c:forEach> 
     </h:form> 
    </body> 
    </html> 
</f:view> 

XHTML Sayfa:

<?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:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
    <title>Simple JSF</title> 
    </h:head> 
    <h:body> 
    <h:form> 
     <ui:repeat value="#{cart.items}" var="item"> 
      <h:commandButton value="#{item}" /> 
     </ui:repeat> 
    </h:form> 
    </h:body> 
</html> 

Neden istek kapsamında fasulye kullanırım ve oturumda orada değişken set? Basit tutun ve kapsamını oturum fasulye değiştirin:

@ManagedBean(name = "cart") 
@SessionScoped 
public class CartBean { 

    private List<String> items; 

    public CartBean() { 
    items = new ArrayList<>(); 
    items.add("shirt"); 
    items.add("skirt"); 
    items.add("trouser"); 
    } 

    public List<String> getItems() { 
    return items; 
    } 

} 
+0

# {...} şablonuna metin gövdesinde izin verilmez :(kullanıyorum $, myInterestListYay içinde 4 olmasına rağmen, bu sadece boş bir komut gösterir, – user3058296

+0

Hangi JSF sürümünü kullanıyorsunuz? Sayfanın daha fazla içeriğini yayınlayabilir misiniz? – Spindizzy

+0

Orijinal sayfamı şu anda tam sayfayla güncelledim Geri kalanları hataların neden olmadığından emin olmak için bir not defteri belgesine kopyaladım. Yönetilen fasulyemin nasıl kurulduğuna dair biraz metin ekledim. – user3058296

İlgili konular