Как использовать первую букву с JSTL/CSS?
Я кодирую приложение JSP/JSTL. Я хотел бы создать ссылку с первой буквой в верхнем регистре, а остальные строчные. Например, "моя LINK" станет "My Link".
Я видел, что в CSS я могу сделать:
<a href="..." style="text-transform: capitalize">${linkName}</a>
Это работает только тогда, когда ${linkName} - все в нижнем регистре, но не работает так, как я хочу, если в верхнем регистре, если он содержит "MY LINK", будет отображаться все в верхнем регистре.
Мне было интересно, как лучше всего решить эту проблему, например, можно использовать JSTL для преобразования ${linkName} в нижний регистр.
Кто-нибудь знает, как это сделать? Или любой альтернативный способ?
Спасибо заранее!
Ответы
Ответ 1
Вы можете использовать JSTL функции fn:toLowerCase()
для ввода строка.
Итак, это должно сделать
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<a href="..." style="text-transform: capitalize">${fn:toLowerCase(linkName)}</a>
Ответ 2
Если вы не хотите использовать CSS и используете JSTL, это решение немного экстремально:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<a href="..." >
${fn:toUpperCase(fn:substring(linkName, 0, 1))}${fn:toLowerCase(fn:substring(linkName, 1,fn:length(linkName)))}
</a>
Ответ 3
Apache Commons предлагает библиотеки для выполнения множества общих полезных задач. WordUtils может помочь вам здесь.
WordUtils.capitalizeFully("aaa BBB cCc");
Будет выводиться...
Aaa Bbb Ccc
Ссылка для WordUtils: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/WordUtils.html#capitalizeFully%28java.lang.String%29
В моем веб-приложении я добавил обертку для этого в свой файл TLD...
<function>
<name>capitalize</name>
<function-class>org.apache.commons.lang3.text.WordUtils</function-class>
<function-signature>java.lang.String capitalizeFully(java.lang.String)</function-signature>
</function>
Итак, теперь я могу это сделать...
<p>Hello ${blah:capitalize(firstName)}</p>
Я оставлю вас читать пользовательские файлы TLD, хотя другие люди объясняют это лучше.
Ответ 4
PFB приведенный ниже код, который преобразует "i AM god" в "Я есть Бог"
<c:forEach var="word" items="${fn:split(fn:toLowerCase(stringToBeConverted),' ')}">
<c:set var="formattedText" value="${formattedText} ${fn:toUpperCase(fn:substring(word,0,1))}${fn:toLowerCase(fn:substring(word,1,fn:length(word)))}" />
</c:forEach>