2010-01-28 5 views
2

최근에 발생한 질문에 사과드립니다. 이것은 토론 포럼이 아니며 주석이 제한되어 있으므로 마지막 질문은 실제 코드로 특정 질문을하여 어떻게 든 내 문제의 근원에 도달 할 수 있기를 바랍니다.JSF에서 Backing Bean String []

확인. 클래스 TaskListData에서

 public class PrismBacking { 
private ArrayList dataList; 

    public ArrayList<String> getFeedDataList() { 
    XMLHandler xmlh = new XMLHandler(); 
    dataList = new ArrayList(); 
    Document doc = xmlh.getDoc(map); // catches removed 

    // get all the feedNames from the doc, and the feedIds 
    String[] FeedIds = xmlh.getXMLList("//feed/feed_id/text()"); 

    for (String feedId : FeedIds) { 
    TaskListData tld = new TaskListData(); 
    tld.setFeedId(feedId); 

    String feedName = xmlh.getValue("//feed[feed_id='" + feedId +"']" +"/feedname/text()"); 
    tld.setFeedName(feedName); 

    String[] FTQs = xmlh.getList("//feed[feed_id='" + feedId +"']" +"/ftq/ftq_id/text()"); 
    for (String ftqId : FTQs) { 
    logger.info("FTQ: " + ftqId); 
    } 
    tld.setFTQs(FTQs); 

    dataList.add(tld); 
    } 

    setFeedDataListSize(dataList.size()); 
    return dataList; 
} 

,

public class TaskListData { 
private String feedId; 
private String feedName; 
private String[] FTQar; 

public String getFeedId() { 
    return feedId; 
} 

public void setFeedId(String f) { 
    feedId = f; 
} 

public String getFeedName() { 
    return feedName; 
} 

public void setFeedName(String fn) { 
    feedName = fn; 
} 

public String[] getFTQs() { 
    return FTQar; 
} 

public void setFTQs(String[] ftqs) { 
    FTQar = ftqs; 
} 
} 

내가있어 내 getter 및 setter 설정 및 내 XPath는 모든 좋은 : 나는이 관련 코드 PrismBacking라는 백업 콩을했습니다. 내 index.jsp jsf 파일에서 :

<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> 
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
    <!-- RichFaces tag library declaration --> 
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%> 
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> 
    <!-- JSTL XML lib declaration --> 
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    <!-- error redirect --> 

    <f:view> 
    <rich:page pageTitle="mypage" markupType="xhtml"> 
     <h:dataTable id="dt1" value="#{PrismBacking.feedDataList}" var="item" 
     border="10" cellpadding="5" cellspacing="3" first="0" 
     rows="#{PrismBacking.feedDataListSize}" width="50%" dir="LTR" 
     frame="hsides" rules="all" 
     summary="This is a JSF code to create dataTable."> 

    <f:facet name="header"> 
    <h:outputText value="This is 'dataTable' demo" /> 
    </f:facet> 

    <h:column> 
    <f:facet name="header"> 
    <h:outputText value="id" /> 
    </f:facet> 
    <h:outputText value="|#{item.feedId}|"></h:outputText> 
    </h:column> 

    <h:column> 
    <f:facet name="header"> 
    <h:outputText value="name" /> 
    </f:facet> 
    <h:outputText value="|#{item.feedName}|"></h:outputText> 
    </h:column> 

    <h:column> 
    <f:facet name="header"> 
    <h:outputText value="ftqs" /> 
    </f:facet> 
    <c:forEach items="#{item.FTQs}" var="jef"> 
    <h:outputText value="|#{jef}|" /> 
    <br /> 
    </c:forEach> 

    </h:column> 

    </h:dataTable> 
    <h:outputText value="" /> 
</rich:page> 
</f:view> 

이 항목은 정상적으로 컴파일되며 오류없이 정상적으로 실행됩니다. 나는 PrismBacking에 logger.info 라인에서 볼 :

|STDOUT| 2010-01-28 00:02:48,960 | INFO | [http-8989-1]: feedId: 1 | feedSwitch: on | feedName: FEED1 
|STDOUT| 2010-01-28 00:02:48,991 | INFO | [http-8989-1]: FTQ: 1 
|STDOUT| 2010-01-28 00:02:48,991 | INFO | [http-8989-1]: feedId: 2 | feedSwitch: on | feedName: FEED2 
|STDOUT| 2010-01-28 00:02:48,991 | INFO | [http-8989-1]: FTQ: 1 
|STDOUT| 2010-01-28 00:02:48,991 | INFO | [http-8989-1]: feedId: 3 | feedSwitch: on | feedName: FEED3 
|STDOUT| 2010-01-28 00:02:48,991 | INFO | [http-8989-1]: FTQ: 1 
|STDOUT| 2010-01-28 00:02:49,007 | INFO | [http-8989-1]: feedId: 4 | feedSwitch: on | feedName: FEED4 
|STDOUT| 2010-01-28 00:02:49,007 | INFO | [http-8989-1]: feedId: 5 | feedSwitch: off | feedName: FEED5 
|STDOUT| 2010-01-28 00:02:49,023 | INFO | [http-8989-1]: feedId: 6 | feedSwitch: on | feedName: FEED6 
|STDOUT| 2010-01-28 00:02:49,038 | INFO | [http-8989-1]: feedId: 7 | feedSwitch: on | feedName: FEED7 

그래서 난 내 데이터 테이블에서의 FTQ 번호 1을 가져야한다 피드 1-3을 알고있다. 페이지 렌더링시이 부분을 보았습니다.

This is 'dataTable' demo 

id name ftqs 
|1| |FEED1| || 
|2| |FEED2| || 
|3| |FEED3| || 
|4| |FEED4| || 
|5| |FEED5| || 
|6| |FEED6| || 
|7| |FEED7| || 

나는 groveling을 좋아하지 않습니다. 긴 게시물을 가질 수는 없지만 이러한 기술에 대해 잘 아는 사람이 없으며 스택 오버플로가 이러한 질문을하는 유일한 곳이기도합니다. 내가 지혜롭게 끝날 때, 나는 여분의 게시물 길이에 신경 쓰지 않기를 바란다.

내 질문에 다음 위 코드에서 TaskListData String [] 멤버 ​​FTQar에 액세스 할 수있게 변경해야합니까? 이 단계에서 나는 솔직하게 말하면 누군가가 내 코드를 수정 한 스 니펫을 게시하여 내가 잘못 나온 곳을 알려줄 것이라고 기대한다고 말한다. 그것이 내게 달린 것이라면, 옳은 대답에 대한 평소보다 많은 점수를 얻게 될 것입니다.

많은 감사 실제로 마크

답변

3

우선 JSTL과 JSF는 코딩 순서대로 예상대로 원활하게 작동하지 않습니다. 실제로는 JSTL이 을 실행하기 전에 JSF가 시작됩니다. 사실상 JSTL은 전체 페이지를 처음부터 끝까지 처리 한 다음 생성 된 결과 (없이의 JSTL 태그는 생성했지만 생성 된 결과가 있음)를 JSF는 전체 페이지를 위에서 아래로 다시 처리합니다.

h:dataTable은 JSTL이 실행되는 순간에 아직 어떤 행도 생성하지 않았기 때문에 h:column 안에있는 c:forEach의 내용을 보지 못할 것입니다.

오히려 같은 토마 호크의 t:dataTable, 또는 RichFaces 'a4j:repeat, 또는 Facelets의'ui:repeat, 또는 어쩌면 중첩 h:dataTable로 JSF 제공 반복하는 구성 요소를 사용합니다.

0

나는 문제가 <c:forEach>를 사용에서 유래 생각합니다. JSTL 태그는 JSF 태그가 항상 평가되지 않으므로 항상 잘 작동하지 않습니다. 시도하십시오 <a4j:repeat>

+0

''태그를 시도했는데 브라우저가 멈 춥니 다. 나는 다른 richfaces 태그들과 같은 문제가 있었지만 그것은 또 다른 이야기이다. – volvox

+0

그럴 것 같지 않습니다. 무한 루프 반복하셨습니까? – Naganalf

+0

아니요, 콘솔에 3 개의 항목 만 있어야한다는 내용의 출력 (위의 목록)이 있습니다. 내가 7 행의 가치가있는 피드를 출력하려했는데, Ftq 배열에 항목이 없기 때문에 문제가 발생했는지 궁금했다. 이 경우에 String [] Ftqs를 채워야합니까? – volvox

0

나는 getter/field의 이름에 대문자를 사용하거나 대소 문자 FTQ를 사용하기 때문에 비슷한 문제가 있음을 기억합니다. item.FTQ를 item.fTQ로 변경하거나 getter/setter의 이름을 변경하려고 시도 했습니까? Ftqs 대신 item.ftqs를 사용합니까?

+0

응답 해 주셔서 감사합니다. 편집자는 TaskListData 클래스에서 FTQar에 대한 getter 및 setter를 강조 표시하지 않았습니다. 나는 지금 편집을 끝냈다. 나는 물어봐야한다, getter/setter는 모두 대문자가 아니다 - 그러나 나는 당신이 의미하는 것을 안다 - 주로 대문자와 같다. 나는 사무실에서 돌아올 때 getFtqs와 setFtqs를 시도 할 것이다. – volvox

+0

좋아요, 완성을 위해 이클립스 3.4와 톰캣 6, 1.6에서 대문자 사용은 아무런 차이가 없었습니다. – volvox

관련 문제