why JSTL number format value does not support runtime expressions? or "value" does not support runtime expressions

1. Check the version of the jstl.. it should be jstl 1.1+

(You're using the prehistoric JSTL 1.0 version (or even a prototype). You need to upgrade to at least JSTL 1.1, or if your container supports it (Servlet 2.5 or newer), upgrade to currently latest JSTL 1.2.
You can find JSTL download links in our JSTL wiki page. Don't forget to remove the old JSTL libraries (jstl.jar and standard.jar) and to fix the @taglib declarations to include the /jsp path. Also ensure that your web.xml is declared conform at least Servlet 2.4 for JSTL 1.1 or as at least Servlet 2.5 for JSTL 1.2.)

2. Ensure that your @ taglib directive. Replace:
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>

for this:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

The /jsp makes the difference.