Enum as key in hashmap to display map values and assign into a local variable

bhupadmini <[email protected]> Wed, 25 Dec 2013 10:53:02 -0800 (PST)
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
Hi,

I have Map with Enum as key and Object as value pair. I have to use map
values and list the objects in freemarker and assign into a local variable.

Say,

I have EnumType.java
public enum EnumType {
	
	INSURED1("1"), INSURED2("2"), SHARED("S");
	
	private final String code;
	
	EnumType(String aCode) {
		this.code=aCode;
	}
	
	public String getCode() {
		return code;
	}

}

User.java
public class User {
	private String userfname;
	private String userlname;
	private String userid;
	private String useraddress;
	
	
	public String getUserfname() {
		return userfname;
	}
	public void setUserfname(String userfname) {
		this.userfname = userfname;
	}
	public String getUserlname() {
		return userlname;
	}
	public void setUserlname(String userlname) {
		this.userlname = userlname;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getUseraddress() {
		return useraddress;
	}
	public void setUseraddress(String useraddress) {
		this.useraddress = useraddress;
	}
	
	
}

AppController.java
public class AppController {
....
public ModelAndView getView() {
..
ModelAndView model = new ModelAndView("/index");
		
		User user1=new User();
		user1.setUserfname("Muthuvel");
		user1.setUserlname("Selvakumar");
		user1.setUserid("M2345");
		user1.setUseraddress("Chennai");
		
		User user2=new User();
		user2.setUserfname("Selvakumar");
		user2.setUserlname("Vaiyapuri");
		user2.setUserid("M2346");
		user2.setUseraddress("Chennai");
		
		/*List<User> listUsers = new ArrayList<User>();
		listUsers.add(user1);
		listUsers.add(user2);*/
		
		Map<EnumType, User> enumMap = new HashMap<EnumType, User>();
		enumMap.put(EnumType.INSURED1, user1);
		enumMap.put(EnumType.INSURED2, user2);
		
		model.addObject("enumMap", enumMap);
..
}
..
}

index.ftl
<html>
<head><title>My freemarker page</title></head>
<body>
Welcome to my page

<#list enumMap?keys as key>
<#if (key=="INSURED1")>
<#assign enumUsers>${enumMap[key]}</#assign>
</#if>
</#list>
</body>
</html>

I am getting the following error


freemarker.core.InvalidReferenceException: The following has evaluated to
null or missing:
==> enumMap[key]  [in template "index.ftl" at line 7, column 22]

Tip: If the failing expression is known to be legally null/missing, either
specify a default value with myOptionalVar!myDefault, or use <#if
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the
last step of the expression; to cover the whole expression, use
parenthessis: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??

The failing instruction (print stack trace for 1 more):
==> ${enumMap[key]}  [in template "index.ftl" at line 7, column 20]

freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98)
	freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382)
	freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
	freemarker.core.DollarVariable.accept(DollarVariable.java:76)
	freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
	freemarker.core.Environment.visitAndTransform(Environment.java:377)
	freemarker.core.BlockAssignment.accept(BlockAssignment.java:83)
	freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
	freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86)
	freemarker.core.Environment.visit(Environment.java:265)
	freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:181)
	freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
	freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
	freemarker.core.Environment.visit(Environment.java:265)
	freemarker.core.MixedContent.accept(MixedContent.java:93)
	freemarker.core.Environment.visit(Environment.java:265)
	freemarker.core.Environment.process(Environment.java:243)
	freemarker.template.Template.process(Template.java:277)

org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:366)

org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:283)

org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:233)

org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167)

org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)

org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1060)

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:798)

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)

org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)


Please help me in resolving the issue. 



--
View this message in context: http://freemarker.624813.n4.nabble.com/Enum-as-key-in-hashmap-to-display-map-values-and-assign-into-a-local-variable-tp4654905.html
Sent from the freemarker-user mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk