2013-12-09 7 views
11

में फ़ोरैच लूप का उपयोग करके मुझे अपने पृष्ठ पर कमांडबूटन की एक सूची बनाने की आवश्यकता है, लेकिन मुझे इसके साथ कुछ परेशानी है। मैं request.setAttribute के माध्यम से अपनी बीन से सूची पास करता हूं और ऐसा लगता है कि जब मैं एक समय में मूल्य प्राप्त करता हूं, लेकिन जब मैं फ़ोरैच लूप के माध्यम से चलता हूं, तो वे सभी शून्य होते हैं (और इस तरह उत्पन्न होते हैं, और एक होने डिफ़ॉल्ट मान 0, "" आदि, जहां तक ​​मुझे पता है)। किसी भी तरह की सहायता का स्वागत किया जाएगा! अतिरिक्त कोड में, जब मैं फ़ोरैच लूप के बाहर बटन बनाता हूं, तो मुझे सही मान मिलते हैं, लेकिन जब मैं लूप चलाता हूं तो नहीं। सूची पूर्णांक प्रकार का है, और बाद में जावा वस्तु होनी चाहिए (एक ही समस्या में भाग गया)। जेएसएफ संस्करण 2.2 का उपयोग कर। दोनों logtest() और gotoprofile() रुचि सूचक बाहर प्रिंट करता है।जेएसएफ

मेरी सेम है:

@ManagedBean(name="MyProfile") 
@RequestScoped 

और मैं के साथ मेरी सेम में मेरी चर myInterestList सेट: तो

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

उपयोग $ {Orly} # के बजाय {Orly} –

+0

मैं इस त्रुटि मिलती है संकलन करने का प्रयास करेगा। "टीएलडी के मुताबिक, विशेषता मान एक डिफर्ड-वैल्यू या डिफर्डर्ड-विधि है, लेकिन निर्दिष्ट मान में $ -expression" – user3058296

उत्तर

29

आप JSF 2 उपयोग कर रहे हैं आप अपने पृष्ठ XHTML में बदलना चाहिए, तो आप कर सकते हैं ui का उपयोग करें: दोहराएं और फेसलेट से बहुत अधिक उपहार प्राप्त करें।

मैंने दो बहुत ही सरल पृष्ठ बनाए, एक जेएसपी के रूप में और दूसरा एक्सएचटीएमएल के रूप में। वे अनुरोध क्षेत्र में एक प्रबंधित बीन का उपयोग करते हैं। दोनों काम कर रहे हैं और एक पंक्ति में तीन बटन प्रस्तुत करते हैं। ध्यान दें कि मैं एक सर्वर के रूप में ग्लासफ़िश का उपयोग करता हूं, क्योंकि इसे शुरू करना आसान था। टोमकैट (7.x) के लिए आपको जेएसएफ-एपीआई, जेएसएफ-इम्प्ल (2.x) और जेएसटीएल (1.2) libs को क्लासपाथ में कॉपी करने की आवश्यकता हो सकती है।

इस JSP पेज है:

<%@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> 

यहाँ एक्सएचटीएमएल पृष्ठ:

<?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> 

तुम क्यों अनुरोध दायरे में एक सेम का उपयोग करें और आप चर सेट वहाँ सत्र में करते हैं? इसे आसान बनाएं और सत्र गुंजाइश के लिए सेम बदलने के लिए:

@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

# {...} टेक्स्ट बॉडी में टेम्पलेट की अनुमति नहीं है, यह कहता है :(अगर मैं उपयोग करता हूं $, यह केवल एक कमांडबटन दिखाता है, जो कि खाली है, मेरी रुचि सूची में 4 होने के बावजूद। – user3058296

+0

जेएसएफ का कौन सा संस्करण आप उपयोग करते हैं? क्या आप पृष्ठ की अधिक सामग्री पोस्ट कर सकते हैं? – Spindizzy

+0

मैंने इस समय पूर्ण पृष्ठ के साथ अपना मूल पोस्ट अपडेट किया मैंने शेष को नोटपैड दस्तावेज़ में कॉपी किया ताकि यह सुनिश्चित किया जा सके कि त्रुटियों का कारण नहीं था। मैंने थोड़ा प्रबंधित किया कि कैसे मेरा प्रबंधित बीन भी स्थापित किया गया है – user3058296