Бин без состояния SEAM не обновляется - PullRequest
1 голос
/ 14 сентября 2011

Я пытаюсь реализовать функцию «забытый пароль» с помощью JSF SEAM на нашей странице указателя, я использую функцию a4j: jsFunction для отправки электронной почты и номера карты пользователя через две

Кажется, это работаетхорошо, когда я просто отправляю электронное письмо (в виде строки), но когда я добавил номер карты (int), он выбросил следующее ..

Причина: javax.el.PropertyNotFoundException: /index.xhtml @ 256,138 assignTo= "# {ForgotPasswordActions.cardnumber}": класс 'org.javassist.tmp.java.lang.Object _ $$ _ javassist_seam_5' не имеет свойства 'cardnumber'.

Объект поддержки выглядит следующим образом...

@Stateless
@Name("forgotPasswordActions")
public class ForgotPasswordActionsBean implements ForgotPasswordActions, Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Logger private Log log;

    @In private EmailService emailService;
    @In private UserDAO userDAO;
    @In private MessagePoster messagePoster;
    @In private Map<String, String> messages;
    private User user;
    private String address;
    private String email;
    private int cardnumber;

    @Override
    public void resetPassword(){
        new RunAsOperation(true) {
            public void execute() {
                if(StringUtils.isNotEmpty(email)){
                    user = userDAO.findByEmail(email);
                }
                else{
                    messagePoster.postPopupInfoMessage(messages.get("inputEmpty"));
                }
                if(user!=null && cardnumber == user.getCardId()){
                    String newPassword = generateRandomPassword();
                    log.debug("updating password...");
                    user.setPassword(newPassword);
                    user = userDAO.makePersistent(user);
                    address = user.getEmail();
                    log.debug("password changed to: "+newPassword);
                    Map<String, Object> emailInfo = new HashMap<String, Object>();
                    emailInfo.put("name", user.getFirstname());
                    emailInfo.put("newPassword", newPassword);
                    emailService.sendToAddress(Email.user_password_reset, address, emailInfo);
                    messagePoster.postPopupInfoMessage(messages.get("pwReset")+" "+user.getEmail());
                }
                else{
                    messagePoster.postPopupInfoMessage(messages.get("resetFailed"));
                }
            }
        }.run();
    }

    //---------------------- Setters

    @Override
    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public void setCardno(int cardnumber) {
        this.cardnumber = cardnumber;
    }

}

и JSF / HTML

    <div id="forgotPasswordDialog" title="Forgot Password">
        <div class="textBox">
            <input id="emailLookupval" type="text" />
            <input id="cardNoval" type="text" />
            <button onclick="resetPassword(jQuery('#emailLookupval').val(),jQuery('#cardNoval').val())" type="button">Reset</button>
            <a4j:form id="forgotPassword">
                <a4j:jsFunction name="resetPassword" 
                        action="#{forgotPasswordActions.resetPassword}"
                        oncomplete="jQuery('#forgotPasswordDialog').dialog('open')">
                    <a4j:actionparam name="userEmail" assignTo="#{forgotPasswordActions.email}"  />
                    <a4j:actionparam name="userCardno" assignTo="#{forgotPasswordActions.cardnumber}" />
                </a4j:jsFunction>
            </a4j:form>
        </div>
    </div>

Я не могу понять, почему он не устанавливает это свойство bean ??Любая помощь приветствуется!

1 Ответ

1 голос
/ 14 сентября 2011

Ваш сеттер называется setCardno(), тогда как setCardnumber() ожидается представлением.#{bean.property} не относится к именам свойств в компоненте.Это относится к именам методов получения / установки.Есть два способа исправить это:

  • Переименовать метод установки:

    public void setCardnumber(int cardnumber) {
        this.cardnumber = cardnumber;
    }
    
  • Или переименовать свойство view:

    assignTo="#{forgotPasswordActions.cardno}"
    
...