Мы создали файл facelets.taglib.xml с некоторыми тегами, созданными для использования в некоторых компонентах JSF.
Для каждого созданного тега мы создаем класс, отвечающий за событие каждого тега
facelets.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://www.sgr.com.br/jsf</namespace>
<tag>
<tag-name>upperCase</tag-name>
<handler-class>com.sistema.util.tag.UpperCaseTag</handler-class>
</tag>
<!-- more tag -->
</facelet-taglib>
Класс верхнийКейс
package com.sistema.util.tag;
import java.io.IOException;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
import javax.faces.view.facelets.FaceletContext;
import javax.faces.view.facelets.FaceletException;
import javax.faces.view.facelets.TagConfig;
import javax.faces.view.facelets.TagHandler;
public class UpperCaseTag extends TagHandler {
public UpperCaseTag() {
this(null);
}
public UpperCaseTag(TagConfig config) {
super(config);
}
public void apply(FaceletContext context, UIComponent componente) throws IOException, FacesException, FaceletException {
this.configureKey(componente);
}
private void configureKey(UIComponent componente) {
componente.getAttributes().put("onkeyup", "toUpperCase(this)");
componente.getAttributes().put("onkeypress", "return noAccent(event);");
}
}
По сравнению с предыдущей версией javascript utils.js в порядке надстройки в верхнем регистре и в верхнем регистре UpperCase Tag
<!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">
<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>
<h:outputStylesheet name="css/sentinel-layout.css" library="sentinel-layout" />
<h:outputStylesheet name="css/core-layout.css" library="sentinel-layout" />
<ui:insert name="css" />
</h:head>
<h:body>
<ui:include src="topbar.xhtml" />
<ui:include src="/page/principal/menu.xhtml" />
<div id="layout-portlets-cover" class="fontRegular">
<p:messages id="messages" closable="true"/>
<ui:insert name="content">
Template
</ui:insert>
</div>
<h:outputScript name="js/utils.js" library="custom"/>
</h:body>
</html>
страница, где мы используем тег upperCase во входных данных.
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:sgr="http://www.sgr.com.br/jsf"
template="/WEB-INF/facelets/templates/template.xhtml">
<ui:define name="content">
<div class="Container100 ui-fluid">
<div class="ContainerIndent">
<h:form id="formFunID" prependId="false">
<p:panel id="pnlCamposID">
<p:outputLabel value="Nome completo:"/>
<p:inputText id="inptNome" value="#{funcionarioBean.funcionario.nome}">
<sgr:upperCase/>
</p:inputText>
</p:panel>
</h:form>
</div>
</div>
</ui:define>
</ui:composition>
Как изображение, пространство имен импортируется нормально xmlns: sgr = "http://www.sgr.com.br/jsf", но при наборе символов не отображается upperCase
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>display-app</display-name>
<welcome-file-list>
<welcome-file>site.xhtml</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
<context-param>
<param-name>primefaces.FONT_AWESOME</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>sentinel</param-value>
</context-param>
<context-param>
<param-name>primefaces.TRANSFORM_METADATA</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/facelets.taglib.xml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/primefaces-sentinel.taglib.xml</param-value>
</context-param>
<context-param>
<param-name>timezone</param-name>
<param-value>GMT-3</param-value>
</context-param>
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
</web-app>
![enter image description here](https://i.stack.imgur.com/kWfOU.png)
Мы перенесли приложение в tomcat версии 9 до того, как использовали wildfly, и эта миграция перестала работать.
Файл javascript обычно загружается в браузере.
Если кто-нибудь знает, есть ли какие-либо настройки для tomcat, и может помочь.