Возникла задача присвоить значкам типа image различные всплывающие подсказки из ViewObject. Один из вариантов реализации - через JavaScript.
Колонка из графических элементов несложно реализуется при помощи иерархии бинов типа switcher:
Наша задача - присвоить хинты из ViewObject каждому из значков (описания и коды хранятся в look up).
Приступим.
Колонка из графических элементов несложно реализуется при помощи иерархии бинов типа switcher:
Наша задача - присвоить хинты из ViewObject каждому из значков (описания и коды хранятся в look up).
Приступим.
- создаем простейший ViewObject, в котором будут выбираться lookup_code и meaning по определенному lookup_type, соответствющему статусам;
- открываем исходный код любой страницы OeBS, содержащей значки и смотрим, каким образом встраиваются наши значки. Нас ждет подарок - статусы в неизменном виде содержатся в идентификаторе:
- формирование двух строк с параметрами через запятую: кодов и значений. Первые соответствуют значению атрибута в StatusSwitcher, вторые - наименования статусов:
// Получение статусов String statusCodes = ""; String statusMeanings = ""; StatusPoplistVOImpl rem = am.getStatusPoplistVO1(); int rowCount = rem.getRowCount(); RowSetIterator iter = rem.createRowSetIterator("iter"); if (rowCount > 0) { iter.setRangeStart(0); iter.setRangeSize(rowCount); for (int i = 0; i < rowCount; i++) { StatusPoplistVORowImpl row = (StatusPoplistVORowImpl)iter.getRowAtRangeIndex(i); if (i > 0){ statusCodes = statusCodes + ","; statusMeanings = statusMeanings + ","; } statusCodes = statusCodes + "\"" + row.getWrappedCode() + "\""; statusMeanings = statusMeanings + "\"" + row.getLookupName() + "\""; } } iter.closeRowSetIterator();
- формируем JS-скрипт, в котором используются массивы из элементов наших строк. Суть в следующем: на странице находятся все теги <img> и проверяются на соответствие маске. Если найден - в свойства объекта title и alt записывается соответствующий элемент из массива значений. Продолжаем код:
// Событие загрузки страницы StringBuffer hBuf = new StringBuffer(); hBuf.append("function initImgHints(){ "); hBuf.append("var status_arr = [" + statusCodes + "];"); hBuf.append("var meaning_arr = [" + statusMeanings + "];"); hBuf.append("img_iter = document.getElementsByTagName('img');"); hBuf.append("for(var i=0; i < img_iter.length; i++) {"); hBuf.append("for (var j=0; j < status_arr.length; j++){"); hBuf.append("if (img_iter[i].id.indexOf(':' + status_arr[j] + ':') != -1){"); hBuf.append("img_iter[i].alt = meaning_arr[j];"); hBuf.append("img_iter[i].title = meaning_arr[j];"); hBuf.append("break;"); hBuf.append("}}}}"); pageContext.putJavaScriptFunction("initImgHints", hBuf.toString()); OABodyBean bodyBean = (OABodyBean) pageContext.getRootWebBean(); bodyBean.setOnLoad("javascript:initImgHints();");
Скрипт будет отрабатывать при загрузке страницы.
Комментариев нет :
Отправить комментарий