Why does <h:inputText required="true"> allow blank spaces?
Solution 1
That's normal and natural behaviour and not JSF specific. A blank space may be perfectly valid input. The required="true"
only kicks in on empty inputs, not in filled inputs. In JSF you can however just create a Converter
for String
class to automatically trim the whitespace.
@FacesConverter(forClass=String.class)
public class StringTrimmer implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return value != null ? value.trim() : null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return (String) value;
}
}
Put this class somewhere in your project. It'll be registered automatically thanks to @FacesConverter
and invoked automatically for every String
entry thanks to forClass=String.class
.
No need to hack the JSF API/impl. This makes no sense.
Solution 2
If you want to turn off the behavior that BalusC notes as one of the answers as standard JSF behavior, you can modify the web.xml and include the following.
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
<context-param>
This will trigger the JSF framework to consider the values null
which may be preferable, or an alternative to the answer from BalusC.
Ing.LkRuiZ
Updated on June 05, 2022Comments
-
Ing.LkRuiZ about 2 years
When I set
required="true"
in a<h:inputText>
, it still allows blank spaces. I have been trying to modify thejsf-api.jar
but I could not understand how to generate new a JAR, so I tried to modify theisEmpty()
method fromUIInput
class and compile it, open thejsf-api.jar
and replace it with the new one, but it did not work.What I need is to do
trim()
when the user writes in a<h:inputText>
to do not allow blank spaces. How can I achieve this?If you want to download the
jsf-api.jar
resource, you can do it, just read how to at: http://javaserverfaces.java.net/checkout.html. -
Ing.LkRuiZ over 12 yearsWoW!!! It was easy and it worked, thank you. I had spent many hours doing this task :/
-
BalusC over 12 yearsYou're welcome. In the future, whenever you think "I need to hack JSF", first ask a quesiton here on Stack Overflow if your reason is really valid ;)
-
Louise over 11 yearsJust a note: if this does not seem to work (the converter is never called), check the answers in this question
-
BalusC over 11 yearsOP's concrete problem concerns strings with spaces/whitespace, not empty strings, for which this context param is indeed one of the solutions.
-
Akhil over 9 yearsI am getting this exception :
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String