Functionally, ${} can only do get, and #{} can do get and a set of values.
Refer the Difference between JSP EL, JSF EL and Unified EL for more details.
Read the JavaEE tutorial :
All expressions using the $ {} syntax are evaluated immediately. These expressions can only be used in the text of the template or as the value of an attribute of a JSP tag that can accept expressions at run time. [...] Immediate evaluation expressions are always read-only expressions. The expression shown above can only get the total value from the bean basket; he cannot set the total price.
Deferred evaluation expressions take the form # {expr} and can be evaluated at other stages of the page life cycle, as defined by any technology that uses the expression. In the case of JavaServer Faces technology, its controller can evaluate the expression at different stages of the life cycle, depending on how the expression is used on the page.
Also see this SO answer .
source share