我創建了我的第一個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);
}
}
這兩個解決方案都沒有工作。 :/ –