First, you have add property file into your context configuration:
@PropertySource(name = "questions", value = "classpath:question.properties")
public class AppConfig {
...
}
I used classpath:
prefix in example(that means file will be located in root of class path), but you can use file:
, to specify absolute path. Note, that name of source is specified as questions
. We will need it in future.
Second, create data container class. Of course, you can use Map<String, String>
to store your questions, but class will be more convenient:
public class Quest{
private String number;
private String text;
//getters and setters
....
}
Third, get property source in controller and load numbers and values:
@Controller
public class MyController {
@Autowired
private ConfigurableEnvironment environment;
@RequestMapping("/mymapping")
public String method(ModelMap model){
List<Quest> questList = loadQuestList();
model.addAttribute("questList", questList);
return "myview";
}
private List<Quest> loadQuestList(){
ResourcePropertySource source =
(ResourcePropertySource)environment.getPropertySources().get("questions");
//first get all names of questions like 'Quest1','Quest2' etc
List<String> nameList = new ArrayList<String>();
for(String name : source.getPropertyNames()){
if(!name.endsWith("Text")){
nameList.add(name);
}
}
//unfortunately, default properties are unsorted. we have to sort it
Collections.sort(nameList);
//now, when we have quest names, we can fill list of quests
List<Quest> list = new ArrayList<Quest>();
for(String name : nameList){
String number = source.getProperty(name);
String text = source.getProperty(name+"Text");
Quest quest = Quest();
quest.setNumber(number);
quest.setText(text);
list.add(quest);
}
return list;
}
}