2011-09-14 20 views
1

は、私が実装しようとしています更新、私はa4jを使用していますGoogleのインデックスページにJSFのSEAMを使用して機能「パスワードを忘れてしまった」ではない:jsFunctionは2のSEAMステートレスBeanは

経由でユーザーの電子メールやカード番号を送信すること(文字列として)電子メールを送信するだけでうまくいくようですが、カード番号(int)を追加すると、次のように投げられました。

原因:javax.el.PropertyNotFoundException:/index.xhtml @ 256,138 assignTo = "#{forgotPasswordActions.cardnumber}":クラス 'org.javassist.tmp.java.lang.Object _ $$ _ javassist_seam_5'には 'cardnumber'というプロパティはありません。

バッキングBeanは、次のようになります...

@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

あなたのセッターはsetCardno()と呼ばれ、setCardnumber()はビューで期待されています。 #{bean.property}は、Beanのプロパティ名には関係しません。 getter/setterメソッド名に関連しています。この問題を解決するには2通りの方法があります。

public void setCardnumber(int cardnumber) { 
    this.cardnumber = cardnumber; 
} 
  • または、ビューのプロパティ名前を変更:

    • は、setterメソッドの名前を変更

      assignTo="#{forgotPasswordActions.cardno}" 
      
  • +0

    素晴らしいが...おかげで! – DaveB

    +0

    ようこそ。 – BalusC

    関連する問題