У меня есть таблица HTML, созданная в JSP библиотекой тегов displaytag. Я хотел бы подавить любые нули, которые появляются в таблице, т.е. их следует заменить пустой ячейкой. Есть ли простой способ добиться этого?




Насколько мне известно, не существует "простого" способа справиться с этим. Единственное свойство конфигурации, связанное с данными, - отображать ли нули или нет.
Лучше обработать это до того, как данные попадут в тег displaytag. Возможно, в сервлете, который предоставляет данные, или во вспомогательном классе представления.
Создайте экземпляр org.displaytag.decorator.TableDecorator и поместите его в таблицу. Используйте атрибут декоратора тега display: table, чтобы поместить ваше полное имя класса декоратора в таблицу (я считаю, что вы можете создать экземпляр, а затем поместить его, но создание этого класса тривиально ... убедитесь, что у вас есть конструктор без аргументов чтобы это работало правильно).
Методы initRow (...) или startRow () - это то место, где вы должны пройти через объект таблицы, установив любые найденные вами нули в ноль (или, если отображаются нули, пустое пространство). Я рекомендую initRow, но сначала убедитесь, что вы используете super.initRow (), чтобы легко получить доступ к текущему объекту строки. Причина, по которой я рекомендую это, заключается в том, что startRow должен возвращать String (по умолчанию возвращается пустая строка), что я не думаю, что вам нужно делать.
Это? Я только посмотрел на TableDecorator за секунду до публикации этого сообщения. Однако, если вы можете переопределить startRow (), вы можете делать все в одном месте с помощью одного экземпляра декоратора, а не создавать или настраивать несколько декораторов столбцов.
Я обнаружил, что этого можно достичь с помощью специальной реализации ColumnDecorator.
public class SuppressZeroDecorator implements DisplaytagColumnDecorator {
/* (non-Javadoc)
* @see org.displaytag.decorator.DisplaytagColumnDecorator#decorate(java.lang.Object, javax.servlet.jsp.PageContext, org.displaytag.properties.MediaTypeEnum)
*/
public Object decorate(Object rowObject, PageContext pageContext, MediaTypeEnum mediaType) {
if (rowObject != null && rowObject.toString().trim().equals("0")) {
return null;
}
return rowObject;
}
}
Декоратор должен быть объявлен для каждого столбца в JSP следующим образом:
<display:column property = "age" title = "Age" decorator = "com.example.ZeroColumnDecorator" />
Метод initRow (), который вы предложили переопределить, объявлен окончательным.