Как и предлагалось, я попытался переопределить поведение columnToggler по умолчанию.Имена заголовков генерируются в методе .render ().Я создал новый файл columnToggler.js и включил его в мой заголовок template.xhtml.
Сначала я попробовал его с регулярным выражением, но в итоге прочитал его с другого html-узла, поскольку регулярное выражение не было достаточно гибким (Имя заголовка столбца и сценарий водяного знака расположены в том же порядке, что и их компоненты xhmtl, помещенные в фасет заголовка таблицы данных)
columnToggler.js
PrimeFaces.widget.ColumnToggler.prototype.render = function () {
this.columns = this.thead.find("> tr > th:not(.ui-static-column)");
this.panel = $("<div></div>").attr("id", this.cfg.id).attr("role", "dialog").addClass("ui-columntoggler ui-widget ui-widget-content ui-shadow ui-corner-all").append('<ul class="ui-columntoggler-items" role="group"></ul>').appendTo(document.body);
this.itemContainer = this.panel.children("ul");
var a = this.tableId + "_columnTogglerState";
this.togglerStateHolder = $('<input type="hidden" id="' + a + '" name="' + a + '" autocomplete="off" />');
this.table.append(this.togglerStateHolder);
this.togglerState = [];
for (var f = 0; f < this.columns.length; f++) {
var c = this.columns.eq(f), g = c.hasClass("ui-helper-hidden"),
h = g ? "ui-chkbox-box ui-widget ui-corner-all ui-state-default" : "ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active",
k = (g) ? "ui-chkbox-icon ui-icon ui-icon-blank" : "ui-chkbox-icon ui-icon ui-icon-check";
var children = c.children(".ui-column-title");
var nodeList = children[0].childNodes;
var arr = Array.from(nodeList);
var l = arr.filter(function (node) {
return node.nodeType === Node.TEXT_NODE;
})[0].data;
this.hasPriorityColumns = c.is('[class*="ui-column-p-"]');
var n = $('<li class="ui-columntoggler-item"><div class="ui-chkbox ui-widget"><div class="ui-helper-hidden-accessible"><input type="checkbox" role="checkbox"></div><div class="' + h + '"><span class="' + k + '"></span></div></div><label>' + l + "</label></li>").data("column", c.attr("id"));
if (this.hasPriorityColumns) {
var b = c.attr("class").split(" ");
for (var e = 0; e < b.length; e++) {
var d = b[e], m = d.indexOf("ui-column-p-");
if (m !== -1) {
n.addClass(d.substring(m, m + 13))
}
}
}
if (!g) {
n.find("> .ui-chkbox > .ui-helper-hidden-accessible > input").prop("checked", true).attr("aria-checked", true)
}
n.appendTo(this.itemContainer);
this.togglerState.push(c.attr("id") + "_" + !g)
}
this.togglerStateHolder.val(this.togglerState.join(","));
this.closer = $('<a href="#" class="ui-columntoggler-close"><span class="ui-icon ui-icon-close"></span></a>').attr("aria-label", PrimeFaces.getAriaLabel("columntoggler.CLOSE")).prependTo(this.panel);
if (this.panel.outerHeight() > 200) {
this.panel.height(200)
}
this.hide()
};
template.xhtml
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
lang="en">
<h:head>
<f:facet name="first">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
</f:facet>
<title><ui:insert name="title">...</ui:insert></title>
<ui:insert name="head"/>
<h:outputScript type="text/javascript" name="/resources/.../js/custom.js"/>
</h:head>
<h:body>
...
</h:body>
</html>