2015-06-27 28 views
0

我創建了我的第一個JSF+EJB應用程序測試,當我以jsf形式插入基本數據並單擊<p:commandButton/>時,除一個輸入外,任務正確完成。在我有2個輸入字段的形式中,#1在我的db.table中設置爲VARCHAR,#2爲INT,但它們都是<p:inputText/>。與他們的對應和EL當通過JSF + EJB應用程序持久化時,在數據庫中獲取null參數

當驗證數據庫中保存的信息時,只有字段#1持續正確,#2設置爲,我不明白爲什麼。

我已經做了以前的應用程序,我使用Hibernate爲持久性,這工作正常,我錯過了Annotation@EJB模塊中的東西嗎?

這裏是我的代碼:

<h:form> 
     <p:panelGrid columns="2" >     
      <p:outputLabel value="Owner"/> 
      <p:inputText value="#{accountMB.account.ownername}"/> 
      <p:outputLabel value="Balance"/> 
      <p:inputText value="#{accountMB.account.balance}"/> 
     </p:panelGrid> 
      <p:commandButton value="Create Account" action="#{accountMB.commandButton()}" ajax="false"/>   
    </h:form> 

ManagedBean:

@ManagedBean 
@RequestScoped 
public class AccountMB { 

    @EJB 
    private AccountFacade facade; 
    private Account account; 

    public AccountMB() { 

    } 
    @PostConstruct 
    public void init(){ 
     this.account = new Account(); 
    } 

     // setters .. getters ... 

    public String commandButton(){ 
     facade.openAccount(this.account.getOwnername(), this.account.getBalance()); 
     return "response?faces-redirect=true"; 
    } 
} 

會話bean:

@Stateless 
public class AccountFacade extends AbstractFacade<Account> { 
    @PersistenceContext(unitName = "bankAppPU") 
    private EntityManager em; 

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

    public AccountFacade() { 
     super(Account.class); 
    } 

    public Account openAccount(String ownername, int balance){ 
     Account ac = new Account(balance, ownername); 
     em.persist(ac); 
     return ac; 
    } 
    public void closeAccount(int accountNumber){ 
      Account ac = em.find(Account.class, accountNumber); 
      if(ac != null) 
       em.remove(ac);    
    } 
    public void deposit(int accountNumber, int amount){ 
      Account ac = em.find(Account.class, accountNumber); 
      if(ac != null) 
       ac.deposit(amount); 
    } 
    public int withdraw(int accountNumber, int amount){ 
      Account ac = em.find(Account.class, accountNumber); 
      return (ac != null)? ac.withdraw(amount): 0; 
    } 
    public List<Account> listAccounts(){ 
     return em.createNamedQuery("Account.findAll").getResultList(); 
    }  
} 

實體Bean:

@Entity 
@Table(name = "account") 
@NamedQueries({ 
    @NamedQuery(name = "Account.findAll", query = "SELECT a FROM Account a")}) 
public class Account implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "ID") 
    private Integer id; 
    @Column(name = "BALANCE") 
    private Integer balance; 
    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 100) 
    @Column(name = "OWNERNAME") 
    private String ownername; 

    public Account() { 
    } 

    public Account(Integer id) { 
     this.id = id; 
    } 

    public Account(Integer id, String ownername) { 
     this.id = id; 
     this.ownername = ownername; 
    } 
// setters .. getters ..      
    public void deposit(int amount){ 
     this.balance += amount; 
    } 
    public int withdraw(int amount){ 
     return (amount > this.balance)? 0 : (this.balance-=amount); 
    }  

} 

回答

0
<p:inputText value="#{accountMB.account.balance}" converter="javax.faces.Integer" /> 

public String commandButton(){ 
     facade.openAccount(this.account.getOwnername(), Integer.parseInt(this.account.getBalance())); 
     return "response?faces-redirect=true"; 
    } 
+0

這兩個解決方案都沒有工作。 :/ –

0

在應用程序的多個地方進行打印balance後,原來我的錯誤是在數據庫本身,我已經建立意外BALANCE INT(11)所以任何比它被設置爲格式更大的數字將被設置爲null