2013-11-14 66 views
0

我試圖運行下面的代碼,但它與以下錯誤失敗。我無法找出出了什麼問題。請幫忙。 錯誤:java.lang.ArrayIndexOutOfBoundsException:1的行號37獲取錯誤爲java.lang.ArrayIndexOutOfBoundsException:1

代碼:

package com.ugam.filter.repository; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.core.env.Environment; 

import com.ugam.domain.filter.FilterTemplate; 


@Configuration 
@PropertySource("classpath:properties/filterTemplate.properties") 
public class FilterTemplateRepository { 
    @Autowired 
    private Environment env; 

    @Bean 
    public Map<String,List<FilterTemplate>> getBean() 
    { 

     Map<String,List<FilterTemplate>> filterTemplateMap=new HashMap<String,List<FilterTemplate>>(); 
     String moduleName=env.getProperty("module"); 
     for(String eachmoduleName : moduleName.split(",")){ 
      String templateName=env.getProperty(eachmoduleName + ".templateNames"); 
      List<FilterTemplate> filterTemplatelist=new ArrayList<FilterTemplate>(); 
      for (String eachtemplateNames : templateName.split(",")) { 
       String templateNameFields[] = env.getProperty(eachmoduleName + "." + eachtemplateNames).split(","); 
       FilterTemplate filterTemplate=new FilterTemplate(); 
       filterTemplate.setTemplateHtml(templateNameFields[0]); 
       filterTemplate.setClassSelect(templateNameFields[1]); 
       filterTemplatelist.add(filterTemplate); 
      } 
      filterTemplateMap.put(eachmoduleName, filterTemplatelist); 
     } 
     return filterTemplateMap; 

    } 


    public List<FilterTemplate> getModuleData(String moduleName) 
    { 

     return getBean().get(moduleName); 
    } 
} 

屬性文件: - 模塊=儀表盤

dashboard.templateNames=templateHtml1,templateHtml2,templateHtml3,templateHtml4 
dashboard.templateHtml1=dashBoardLeftInsight.html,leftpanel 
dashboard.templateHtml2=dcdcsFilterOptions.html.html, 
dashboard.templateHtml3=advanceFilterOptions.html,advancedOptions 
dashboard.templateHtml4=reportFilterOptions.html,reportdashboard 
+0

向我們顯示屬性文件中的屬性。 –

+3

你確定每次調用'env.getProperty(eachmoduleName +「。」+ eachtemplateNames).split(「,」);''時至少有一個','?在假定至少有2個元素之前檢查你的數組長度。 – rgettman

+0

是的,templateNameFields [1]意味着該數組至少有2個元素(即,那裏有一個逗號), –

回答

2

你深信:

env.getProperty(eachmoduleName + "." + eachtemplateNames) 

包含逗號的值嗎?如果沒有,那麼filterTemplate.setClassSelect(templateNameFields[1]);會給你你的例外。

編輯開始:

你的數據包含dashboard.templateHtml2=dcdcsFilterOptions.html.html,

確實包含「」逗號,但經常String.split()會忽略逗號後的空值。您可能需要使用的String.split(",", -1)的「完整」的版本,它會返回和代表在輸入字符串空值空字符串值....

編輯結束:

你需要「防守」計劃的更多,並期待意外驚喜:

  // add a default value "" if the property is not set. 
      String value = env.getProperty(eachmoduleName + "." + eachtemplateNames, ""); 
      String templateNameFields[] = value.split(","); 
      if (templateNameFields.length != 2) { 
       // log an error or something 
       continue; // move on to valid data. 
      } 
      FilterTemplate filterTemplate=new FilterTemplate(); 
      filterTemplate.setTemplateHtml(templateNameFields[0]); 
      filterTemplate.setClassSelect(templateNameFields[1]); 
+0

實際上,從新發布的屬性文件來看,這正是templateHtml2 – quazzieclodo

+0

編輯建議String.split(...,-1) – rolfl

0

在此行中

filterTemplate.setClassSelect(templateNameFields[1]); 

它失敗,因爲這有沒有 「類選擇」。

dashboard.templateHtml2=dcdcsFilterOptions.html.html, 
相關問題