Используя библиотеку DisplayTag, я хочу, чтобы текущая выбранная строка имела уникальный пользовательский класс с использованием TableDecorator - PullRequest
1 голос
/ 07 апреля 2010

Я пытался выяснить, как выделить выбранную строку в таблице.В моем jsp есть jsp scriplet, который может получить доступ к id строки, которую создает библиотека displaytag.Я хочу сравнить его с идентификатором текущей строки, выбранной пользователем $ {currentNoteId}.Прямо сейчас, если строка id = 849 (жестко запрограммирована), класс «currentClass» добавляется только к этой строке таблицы.Мне нужно изменить 849 для {$ currentNoteId}, и я не знаю, как это сделать.Я использую Java, Spring MVC.JSP: ...

<%
request.setAttribute("dyndecorator", new org.displaytag.decorator.TableDecorator()  
{  
   public String addRowClass()  
   {  
      edu.ilstu.ais.advisorApps.business.Note row =               
      (edu.ilstu.ais.advisorApps.business.Note)getCurrentRowObject();      
            String rowId = row.getId();
            if ( rowId.equals("849") ) {
                return "currentClass";
            }
            return null;              
        }
    });
%> 

<c:set var="currentNoteId" value="${studentNotes.currentNote.id}"/>
...
<display:table id="noteTable" name="${ studentNotes.studentList }" pagesize="20"
  requestURI="notesView.form.html" decorator="dyndecorator">
    <display:column title="Select" class="yui-button-match" href="/notesView.form.html"
      paramId="note.id" paramProperty="id">
      <input type="button" class="yui-button-match2" name="select" value="Select"/>
    </display:column>
    <display:column property="userName" title="Created By" sortable="true"/>
    <display:column property="createDate" title="Created On" sortable="true" 
       format="{0,date,MM/dd/yy hh:mm:ss a}"/>
    <display:column property="detail" title="Detail" sortable="true"/>
</display:table>
...

Это также может быть сделано с помощью javascript, и это может быть лучше, но документация предложила это, поэтому я подумал, что попробую.Я нигде не могу найти пример с использованием addRowClass (), если только сравнение не выполняется с полем, уже находящимся в строке (в примере документации используется сумма в долларах) или жестко закодировано в виде идентификатора «849».

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

1 голос
/ 07 апреля 2010

Я пошел вперед и сделал это в javascript вместо этого. Когда я использовал currentNoteId в скриптлете, как это:

String rowId = row.getId();
String noteId = (String) pageContext.getAttribute("currentNoteId");
if ( rowId.equals( noteId ) ) {
    return "currentClass";
}
return null;

Я получил ошибку: получил ошибку Невозможно обратиться к неконечной переменной pageContext внутри внутреннего класса, определенного в другом методе.

Так что вместо этого я написал:

function highlightCurrentTableRow(tableId, currentRowId ) {
    var table = document.getElementById(tableId);
    var rows = table.getElementsByTagName("tr");
    console.log( "rowId", "'" + currentRowId + "'" );
    for (i = 1; i < rows.length; i++) {
        rowId = rows[i].getElementsByTagName("td")[0].innerHTML;
        console.log( "  rowId", "'" + rowId + "'" );
        if ( rowId == currentRowId ) {
            console.log( "got here" );
            var rowClass = rows[i].getAttribute("class");
            rows[i].setAttribute("class", rowClass + " currentClass"   );  
        };
    }
}

На самом деле это может не работать в IE, поскольку слово "класс" является ключевым словом, поэтому вместо этого я использовал Yahoo YUI addClass (элемент, класс), поэтому я заменил

var rowClass = rows[i].getAttribute("class");
rows[i].setAttribute("class", rowClass + " currentClass"   ); 

с

YAHOO.util.Dom.addClass(rows[i],'currentClass');
...