Избегайте отображения длинного значения по умолчанию 0 в h: inputText

У меня есть <h:inputText>, который принимает такое значение long

<h:inputText value="#{ServiceTable.ID}" />

Свойство объявлено так

public class ServiceTable {

    private long ID;

    // Getter and setter for ID.
}

Когда я открываю страницу, я всегда вижу 0 в текстовом поле. Как я могу этого избежать? Мне просто нужно пустое текстовое поле. Я использую JSF 1.2.


person Sreeram    schedule 20.09.2011    source источник


Ответы (2)


Используйте Long вместо long. По умолчанию это null.

private Long ID;

И, если вы используете Tomcat 6.0.16 или новее или его форк, вам необходимо добавить следующий аргумент VM к аргументам запуска сервера, а также отключить принудительное EL-приведение примитивов и их оболочек:

-Dorg.apache.el.parser.COERCE_TO_ZERO=false
person BalusC    schedule 20.09.2011
comment
Спасибо BalusC за ответ. Я регулярно читаю ваш блог. Он очень информативный и полезный для новичков. Можете ли вы объяснить мне, в чем разница? - person Sreeram; 20.09.2011
comment
long — это примитив, который имеет значение по умолчанию 0 при объявлении как переменная класса/экземпляра. Long — это объект-оболочка, который имеет значение по умолчанию null. Это просто базовая Java. См. также учебник Java по примитивным типам: download.oracle.com/javase /tutorial/java/nutsandbolts/ - person BalusC; 20.09.2011
comment
Спасибо за помощь BalusC. Заработало. Не подскажете, куда добавить вышеуказанную команду? - person Sreeram; 20.09.2011
comment
В качестве аргумента запуска ВМ или в качестве JAVA_OPTS переменной среды. Но если это работает, то вам все равно не нужно добавлять этот аргумент. - person BalusC; 20.09.2011
comment
У меня также есть еще одно небольшое уточнение. Сегодня я рассмотрел этот вопрос, на который вы ответили stackoverflow.com/questions/2524514/ Он работает нормально. Но флажки остаются установленными даже после отправки. Как этого избежать? - person Sreeram; 20.09.2011
comment
Привет, BalusC, связав HashMap с флажком h: selectboolean, как мне изменить отдельную ячейку с данными с помощью h: inputtext в режим редактирования, чтобы я мог редактировать все столбцы и строки одновременно? - person Sreeram; 21.09.2011
comment
Привет @BalusC, спасибо за ваш ответ, я просто хочу знать, что использование ссылочного типа Long не очень хорошо, вместо использования длинного примитивного типа. Итак, это решение повлияет на производительность? Или есть другие альтернативные способы избежать отображения 0 с помощью конвертера jsf ?? - person Ye Win; 19.09.2016
comment
@YeWin: Производительность? Вы все еще используете 30-летние ПК на базе 386? - person BalusC; 19.09.2016
comment
@BalusC, Нет. Я просто подумал, что использование Long вместо long — это дорогой код, согласно ссылкам на книги Effective Java и Clean Code. Если у вас есть какие-либо уроки для меня и ссылки для этого, пожалуйста, дайте мне знать. - person Ye Win; 19.09.2016

ужасный! многие разработчики не имеют доступа к реальному серверу, и иногда вы просто не можете подойти к клиенту и сказать ему: «остановите свой сервер и перезапустите все с этими параметрами запуска».

Почему люди в команде Apache никогда не думали об этом?

Если вы находитесь в такой ситуации, как и я, другое решение - получить поле в виде строки и проанализировать его вручную в вашем вспомогательном компоненте.

person demonz demonz    schedule 15.12.2011