Я работаю над проектом Java EE, который в будущем станет достаточно большим, и я хочу поделиться как можно большим количеством кода.Это включает в себя не только код Java, но и код для элементов пользовательского интерфейса.Я думаю о разработке корпоративных компонентов, основанных на четко определенных предметах (таких как администрирование пользователей, налоги, продукты), которые взаимодействуют на основе сообщений, компонентов и т. Д.Я также думаю о том, чтобы дать всем этим компонентам некоторые управляемые bean-компоненты и JSF-композиты, чтобы обеспечить некоторые базовые функциональные возможности для последующего использования в веб-интерфейсе.Это контекст ...
Чтобы конкретизировать: допустим, у меня есть EAR (um.ear) для управления пользователями.В ней у меня есть несколько сущностей JPA для подключения к базе данных (jpa.jar), и у меня есть несколько корпоративных компонентов для базовых функций, таких как аутентификация (ejb.jar).Кроме того, я хочу поместить другой файл jar в (jsf.jar), который содержит управляемый компонент LoginController для использования с составным компонентом (с вводом имени пользователя и пароля) login_box.xhtml, который я хочу разместить позже в моем веб-интерфейсе.в разные места, в зависимости от фактической страницы.
Логин_box.xhtml:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:composite="http://java.sun.com/jsf/composite"
xmlns:e="http://java.sun.com/jsf/composite/login">
<h:head>
<title>Login Box</title>
</h:head>
<h:body>
<composite:interface>
</composite:interface>
<composite:implementation>
<h:outputStylesheet library="css" name="login.css" target="head" />
<div class="login_box">
<h:form>
<h:messages />
<h:panelGrid columns="2" columnClasses="rightAlign,leftAlign">
<h:outputText value="Email address:" />
<h:inputText label="Email address" value="#{LoginController.email}"
required="true" size="8">
<f:validator validatorId="emailAddressValidator" />
<f:validateLength minimum="5" maximum="128" />
</h:inputText>
<h:outputText value="Password:" />
<h:inputText label="Password" value="#{LoginController.password}"
required="true" size="8" />
</h:panelGrid>
<h:commandButton action="${LoginController.login()}"
value="Login..." />
</h:form>
</div>
</composite:implementation>
</h:body>
</html>
В моем основном приложении я хочу работать с шаблонами JSF для генерации страниц, и я хочу поставитьполе для входа с тегом на страницы по мере необходимости.
Текущая настройка:
jsf.jar inside um.ear:
|- META-INF/
| |- faces-config.xml
| |- web.xml
| |- sub-web.xml
| \- resources
| \- login
| \- login_box.xhtml
\- com
|- inside it the managed bean classes
Вызывающий xhtml выглядит так:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:e="http://java.sun.com/jsf/composite/login">
<h:head>
<title>Title</title>
</h:head>
<h:body>
<e:login_box />
</h:body>
</html>
Когда я используютаким образом, я не получаю никаких ошибок, и в своем результирующем HTML-коде вместо желаемого логина я вижу поле.
Когда я все делаю это в одном EAR и помещаю управляемые bean-компоненты и JSF вWAR (классы перемещаются в WEB-INF / classes и ресурсы в WEB-INF / resources) внутри EAR все работает нормально.Но как я могу развернуть управляемые bean-компоненты и JSF для последующего использования в других EAR или JAR?Я прочитал, что /META-INF/faces-config.xml будет достаточно, чтобы заставить контейнер сканировать JSF-файлы.
Мои лица-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
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-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
Я работаю с JBoss 6.1-Final и перепробовал все возможные места внутри JAR, что было логично для меня.Я помещаю классы и каталог ресурсов в корень '/', в / META-INF и в WEB-INF.Все это не сработало.У кого-нибудь есть предложения, что тут не так?