Мне не удалось найти решение этой проблемы, и мое сообщение на форуме Seam осталось без ответа. Я надеюсь, что кто-то здесь может помочь.
Я нуб, работающий с Шомом, поэтому я уверен, что просто делаю глупости. Буду очень признателен за любую помощь, которую мне могут оказать ... Я потратил впустую часы и ничего не получил Я использовал инструменты jboss для создания проекта шва в eclipse. Инструмент взял предварительно созданные сущности JPA и создал базовое веб-приложение. Моим первым шагом было добавить страницу регистрации, чтобы я мог создать некоторых пользователей и войти в систему, используя аутентификацию базы данных (я настроил это, но протестирую, как только страница регистрации заработает). Я использовал пример бронирования шва, чтобы помочь мне (в основном, интеграция формы и дополнительных полей в представление приложения seam-gen). Когда я тестирую страницу регистрации, я получаю NullPointerExceptions для всех введенных полей. Я просмотрел весь пример бронирования шва, просмотрел в Интернете информацию о примерах и быстро прочитал некоторые разделы книги, и я не вижу, где требуется дополнительная информация о конфигурации. Что в мире я делаю не так? Пожалуйста, помогите !!!
Я использую JBoss Server (версия для сообщества) 5.1.0GA и Seam 2.2.0GA.
Если вам нужно больше информации, чем то, что я публикую, пожалуйста, дайте мне знать. Спасибо всем заранее за вашу помощь !!
Stateful EJB:
@Stateful
@Scope(EVENT)
@Name("register")
public class RegisterAction implements Register {
@In
private User user;
@PersistenceContext
private EntityManager entityManager;
@In
private FacesMessages facesMessages;
private String verify = null;
private boolean registered = false;
public void registerUser() {
if (user.getPassword().equals(verify)) {
List existing = entityManager
.createQuery(
"select u.userName from User u where u.userName=#{user.userName}")
.getResultList();
if (existing.size() == 0) {
entityManager.persist(user);
facesMessages
.add("Successfully registered as #{user.userName}");
registered = true;
} else {
facesMessages.addToControl("userName",
"Username #{user.userName} already exists");
}
} else {
facesMessages.addToControl("verify", "Re-enter your password");
verify = null;
}
}
public void invalid() {
facesMessages.add("Please try again");
}
public boolean isRegistered() {
return registered;
}
public String getVerify() {
return verify;
}
public void setVerify(String verify) {
this.verify = verify;
}
@Remove
@Destroy
public void destroy() {
}
}
Локальный интерфейс EJB:
@Local
public interface Register
{
public void registerUser();
public void invalid();
public String getVerify();
public void setVerify(String verify);
public boolean isRegistered();
public void destroy();
}
XHTML страницы регистрации:
<ui:define name="body">
<rich:panel>
<f:facet name="header">Register</f:facet>
<h:form id="registration">
<fieldset><s:decorate id="firstNameDecorate"
template="layout/edit.xhtml">
<ui:define name="label">First Name:</ui:define>
<h:inputText id="firstName" value="#{user.firstName}"
required="true">
<a:support id="onblur" event="onblur" reRender="firstNameDecorate" />
</h:inputText>
</s:decorate> <s:decorate id="lastNameDecorate" template="layout/edit.xhtml">
<ui:define name="label">Last Name:</ui:define>
<h:inputText id="lastName" value="#{user.lastName}" required="true">
<a:support id="onblur" event="onblur" reRender="lastNameDecorate" />
</h:inputText>
</s:decorate> <s:decorate id="emailDecorate" template="layout/edit.xhtml">
<ui:define name="label">Email:</ui:define>
<h:inputText id="emailAddress" value="#{user.emailAddress}"
required="true">
<a:support id="onblur" event="onblur" reRender="emailDecorate" />
</h:inputText>
</s:decorate> <s:decorate id="usernameDecorate" template="layout/edit.xhtml">
<ui:define name="label">Username:</ui:define>
<h:inputText id="username" value="#{user.userName}" required="true">
<a:support id="onblur" event="onblur" reRender="usernameDecorate" />
</h:inputText>
</s:decorate> <s:decorate id="passwordDecorate" template="layout/edit.xhtml">
<ui:define name="label">Password:</ui:define>
<h:inputSecret id="password" value="#{user.password}"
required="true" />
</s:decorate> <s:decorate id="verifyDecorate" template="layout/edit.xhtml">
<ui:define name="label">Verify Password:</ui:define>
<h:inputSecret id="verify" value="#{register.verify}"
required="true" />
</s:decorate>
<div class="buttonBox"><h:commandButton id="register"
value="Register" action="#{register.registerUser}" />   <s:button
id="cancel" value="Cancel" view="/index.xhtml" /></div>
</fieldset>
</h:form>
</rich:panel>
</ui:define>
</ui:composition>
Шаблон XHTML (страница регистрации использует это):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:a="http://richfaces.org/a4j"
xmlns:s="http://jboss.com/products/seam/taglib"
contentType="text/html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>MyApp</title>
<link rel="shortcut icon" href="#{request.contextPath}/favicon.ico"/>
<a:loadStyle src="resource:///stylesheet/theme.xcss"/>
<a:loadStyle src="/stylesheet/theme.css"/>
<ui:insert name="head"/>
</head>
<body>
<ui:include src="menu.xhtml">
<ui:param name="projectName" value="MyApp"/>
</ui:include>
<div class="body">
<h:messages id="messages" globalOnly="true" styleClass="message"
errorClass="errormsg" infoClass="infomsg" warnClass="warnmsg"
rendered="#{showGlobalMessages != 'false'}"/>
<ui:insert name="body"/>
</div>
<div class="footer">
<p>Powered by <a href="http://seamframework.org">Seam</a> #{org.jboss.seam.version} and <a href="http://www.jboss.org/jbossrichfaces">RichFaces</a>. Generated by seam-gen.</p>
<s:fragment rendered="#{init.debug}">
<a:log hotkey="D"/>
<p style="margin-top: -0.5em;">
Conversation: id = #{conversation.id}, #{conversation.longRunning ? 'long running' : 'temporary'}#{conversation.nested ? ', nested, parent id = '.concat(conversation.parentId) : ''}
#{' - '}
Ajax4jsf Log (Ctrl+Shift+D)
#{' - '}
<s:link id="debugConsole" view="/debug.xhtml" value="Debug console" target="debugConsole"/>
#{' - '}
<s:link id="resetSession" view="/home.xhtml" action="#{org.jboss.seam.web.session.invalidate}" propagation="none" value="Terminate session"/>
</p>
</s:fragment>
</div>
</body>
</html>
</f:view>
Файл Seam Components.xml:
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:persistence="http://jboss.com/products/seam/persistence"
xmlns:drools="http://jboss.com/products/seam/drools"
xmlns:bpm="http://jboss.com/products/seam/bpm"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:mail="http://jboss.com/products/seam/mail"
xmlns:web="http://jboss.com/products/seam/web"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd
http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd
http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.2.xsd
http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.2.xsd
http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd
http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.2.xsd
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd
http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">
<core:init debug="true" jndi-pattern="@jndiPattern@"/>
<core:manager concurrent-request-timeout="500"
conversation-timeout="120000"
conversation-id-parameter="cid"
parent-conversation-id-parameter="pid"/>
<!-- Make sure this URL pattern is the same as that used by the Faces Servlet -->
<web:hot-deploy-filter url-pattern="*.seam"/>
<persistence:managed-persistence-context name="entityManager" auto-create="true"
persistence-unit-jndi-name="java:/MyAppEntityManagerFactory"/>
<drools:rule-base name="securityRules">
<drools:rule-files>
<value>/security.drl</value>
</drools:rule-files>
</drools:rule-base>
<security:rule-based-permission-resolver security-rules="#{securityRules}"/>
<security:identity-manager identity-store="#{jpaIdentityStore}" />
<security:jpa-identity-store
entity-manager="#{entityManager}" user-class="my.app.path.dao.profiles.User"
role-class="my.app.path.dao.profiles.Role" />
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
<mail:mail-session host="localhost" port="25"/>
</components>