2013-06-21 3 views
1

모든 격자 패널을 arraylist에 저장하여 필요에 따라 반복 할 수 있도록했습니다. 그러나 얻은 결과는 내 기대와 달랐습니다. Netbeans 디버깅 모드를 사용하면 arraylist에 추가 된 모든 gridpanel이 jsp에서 바인드 된 것과 다른 값을 가짐을 알 수 있습니다. 예를 들어바인딩을 통해 제출 된 값 가져 오기

, (에서 디버깅 모드)

Name     Type     Value 
gridPanel1    HtmlPanelGrid   #334 
. 
. 
gridPanels    ArrayList_   #323 
[0]      HtmlPanelGrid   #524 

문제는 잘못 무엇인가? 올바른 방법은 무엇입니까?

JSP 파일

<h:panelGrid binding="#{CreatePage.gridPanel1}" columns="10" id="gridPanel1" style="height: 100%" width="671"> 
    <webuijsf:label for="column_TF1" id="columnLabel1" text="Column 1: "/> 
    <webuijsf:textField binding="#{CreatePage.column_TF1}" id="column_TF1" valueChangeListenerExpression="#{CreatePage.column_TF1_processValueChange}"/> 
    <webuijsf:label for="dataDropDown1" id="dataLabel1" text="Data Type: "/> 
    <webuijsf:dropDown binding="#{CreatePage.dataDropDown1}" id="dataDropDown1" 
            items="#{CreatePage.dataDropDown1DefaultOptions.options}" 
            onChange="webui.suntheme4_2.common.timeoutSubmitForm(this.form, 'mainGridPanel:columnGridPanel:gridPanel1:dataDropDown1');" 
            selected="#{CreatePage.dataDropDown1DefaultOptions.selectedValue}" valueChangeListenerExpression="#{CreatePage.dataDropDown1_processValueChange}"/> 
    <webuijsf:textField binding="#{CreatePage.charValueTF1}" columns="5" id="charValueTF1" rendered="false"/> 
    <webuijsf:label for="pkDropDown1" id="pkLabel1" text="Primary Key: "/> 
    <webuijsf:dropDown binding="#{CreatePage.pkDropDown1}" id="pkDropDown1" 
            items="#{CreatePage.pkDropDown1DefaultOptions.options}" onChange="" selected="#{CreatePage.pkDropDown1DefaultOptions.selectedValue}"/> 
    <webuijsf:label for="nullableDropDown1" id="nullableLabel1" text="Nullable:"/> 
    <webuijsf:dropDown binding="#{CreatePage.nullableDropDown1}" id="nullableDropDown1" 
            items="#{CreatePage.pkDropDown1DefaultOptions.options}" onChange="" 
            selected="#{CreatePage.pkDropDown1DefaultOptions.selectedValue}" valueChangeListenerExpression="#{CreatePage.nullableDropDown1_processValueChange}"/> 
</h:panelGrid> 
<h:panelGrid binding="#{CreatePage.gridPanel2}" columns="10" id="gridPanel2" style="height: 100%" width="671"> 
    <webuijsf:label for="column_TF2" id="columnLabel2" text="Column 2: "/> 
    <webuijsf:textField binding="#{CreatePage.column_TF2}" id="column_TF2" valueChangeListenerExpression="#{CreatePage.column_TF2_processValueChange}"/> 
    <webuijsf:label for="dataDropDown2" id="dataLabel2" text="Data Type: "/> 
    <webuijsf:dropDown binding="#{CreatePage.dataDropDown2}" id="dataDropDown2" 
            items="#{CreatePage.dataDropDown1DefaultOptions.options}" 
            onChange="webui.suntheme4_2.common.timeoutSubmitForm(this.form, 'mainGridPanel:columnGridPanel:gridPanel2:dataDropDown2');" selected="#{CreatePage.dataDropDown1DefaultOptions.selectedValue}"/> 
    <webuijsf:textField binding="#{CreatePage.charValueTF2}" columns="5" id="charValueTF2" rendered="false"/> 
    <webuijsf:label for="pkDropDown2" id="pkLabel2" text="Primary Key: "/> 
    <webuijsf:dropDown binding="#{CreatePage.pkDropDown2}" id="pkDropDown2" 
            items="#{CreatePage.pkDropDown1DefaultOptions.options}" onChange="" selected="#{CreatePage.pkDropDown1DefaultOptions.selectedValue}"/> 
    <webuijsf:label for="nullableDropDown2" id="nullableLabel2" text="Nullable:"/> 
    <webuijsf:dropDown binding="#{CreatePage.nullableDropDown2}" id="nullableDropDown2" 
            items="#{CreatePage.pkDropDown1DefaultOptions.options}" onChange="" 
            selected="#{CreatePage.pkDropDown1DefaultOptions.selectedValue}" valueChangeListenerExpression="#{CreatePage.nullableDropDown1_processValueChange}"/> 
</h:panelGrid> 

자바 파일

List<HtmlPanelGrid> gridPanels = new ArrayList<HtmlPanelGrid>(); 

public HtmlPanelGrid getGridPanel1() { 
    return gridPanel1; 
} 

public void setGridPanel1(HtmlPanelGrid hpg) { 
    this.gridPanel1 = hpg; 
} 
private HtmlPanelGrid gridPanel2 = new HtmlPanelGrid(); 

public HtmlPanelGrid getGridPanel2() { 
    return gridPanel2; 
} 

public void setGridPanel2(HtmlPanelGrid hpg) { 
    this.gridPanel2 = hpg; 
} 
private HtmlPanelGrid gridPanel3 = new HtmlPanelGrid(); 

if (gridPanels.isEmpty()) { 
     gridPanels.add(gridPanel1); 
     gridPanels.add(gridPanel2); 
     gridPanels.add(gridPanel3); 
     gridPanels.add(gridPanel4); 
     gridPanels.add(gridPanel5); 
     gridPanels.add(gridPanel6); 
} 

for (int i = 0; i < gridPanels.size(); i++) { 
     TextField tempTF = (TextField) gridPanels.get(i).findComponent(("column_TF" + Integer.toString(i))); 

     // I always get null value 
     tempStr = (String) tempTF.getValue(); 
    } 
+0

형식하시기 바랍니다해야합니다. 질문을 줄이십시오. – Nishant

+0

지저분한 코드. 아무것도 이해할 수 없다. – Masudul

+0

나는 코드를 읽을 수있게 만든다고 생각한다 : –

답변

1

내가 바로 이곳에서 값을 받고 있지 않다 때문에 null 값을 얻는 것은 계속하는 이유.

올바른 코드는

for (int i = 0; i < gridPanels.size(); i++) { 
    // first get() returns the gridPanel 
    // second get() returns the components within the gridPanel. 
    // In this case, 1 is the TextField 
    TextField tempTF = (TextField) gridPanels.get(i).getChildren().get(1); 

    tempStr = (String) tempTF.getValue(); 
}