2014-03-12 91 views
0

我正在使用primefaces選擇列表並獲取錯誤,如問題所述。僅發佈問題相關代碼。 XHTML頁面選擇列表顯示錯誤在類型java.lang.String上找不到屬性'name'

<p:row> 
    <p:column> 
    <p:outputLabel style="font-size:12px;" styleClass="labelCaption" 
    for="bank" value="Bank(s) Name :" /> 
    </p:column> 
    <p:column colspan="3"> 
    <p:pickList id="bank" style="font-size:12px;" required="true" value="#{eipoIRBean.dualbanks}" var="dbanks" itemLabel="#{dbanks.name}" itemValue="#dbanks}"> 
    <f:facet name="sourceCaption">Available Banks</f:facet> 
    <f:facet name="targetCaption">Selected Banks</f:facet> 
    </p:pickList> 
    </p:column> 
    </p:row> 
    <p:row> 
    <p:column colspan="4" align="left" 
    styleClass="panelGridFooter ui-widget-header"> 
    <p:commandButton id="submit" ajax="false" 
    style="font-size:12px;" value="Save" 
    action="#{eipoIRBean.submit}" 
    icon="ui-icon-check"> 
    </p:commandButton> 
    <p:commandButton icon="ui-icon-arrowreturnthick-1-w" 
    style="font-size:12px;" value="Cancel" 
    action="listMyGroupLifeClaim?faces-redirect=true" 
    immediate="true" global="true"> 
    </p:commandButton> 
    </p:column> 
    </p:row> 

@ViewScoped 
@ManagedBean(name = "eipoIRBean") 
public class InvestorRegistrationBean implements Serializable{ 
    private InvestorSetupBusinessObj businessObj = new InvestorSetupBusinessObj(); 
    private DualListModel<Bank> dualbanks; 

    public DualListModel<Bank> getDualbanks() { 
     return dualbanks; 
    } 

    public void setDualbanks(DualListModel<Bank> dualbanks) { 
     this.dualbanks = dualbanks; 
    } 

    public InvestorSetupBusinessObj getBusinessObj() { 
     return businessObj; 
    } 

    public void setBusinessObj(InvestorSetupBusinessObj businessObj) { 
    this.businessObj = businessObj; 
    } 

    public InvestorRegistrationBean(){ 
     dualList_of_banks(); 
    } 
    public void dualList_of_banks(){ 
     dualbanks = new DualListModel<Bank>(businessObj.getInvestor().getBanks(), new ArrayList<Bank>()); 
    } 
    public void submit() { 
     businessObj.getInvestor().setBanks(dualbanks.getTarget()); 
     businessObj.save(); 
    } 
} 

業務對象

public class InvestorSetupBusinessObj extends BaseBusinessObject { 
    private Investor investor= new Investor(); 
    private InvestorRequestInvoker invoker = new InvestorRequestInvoker(this); 
    private List<Map<String,Object>> dataGrid; 

    public Investor getInvestor() { 
     return investor; 
    } 

    public void setInvestor(Investor investor) { 
    this.investor = investor; 
    } 

    public InvestorRequestInvoker getInvoker() { 
     return invoker; 
    } 

    public void setInvoker(InvestorRequestInvoker invoker) { 
      this.invoker = invoker; 
    } 

    public InvestorSetupBusinessObj(){ 
     getInvestor().setBanks(invoker.selectAllBank()); 
    } 
} 

Bank.java類

public class Bank implements Serializable { 
private static final long serialVersionUID = 1L; 
private long id; 
private String name; 
private List<BankBranch> bankBranches; 
private List<Investor> investors; 
private List<InvestorJointHolder> investorJointHolders; 
private List<PoBank> poBanks; 
private List<PoSubscription> poSubscriptions; 

public Bank() { 
} 


@Id 
public long getId() { 
    return this.id; 
} 

public void setId(long id) { 
    this.id = id; 
} 


public String getName() { 
    return this.name; 
} 

public void setName(String name) { 
    this.name = name; 
} 


//bi-directional many-to-one association to BankBranch 
@OneToMany(mappedBy="bank") 
public List<BankBranch> getBankBranches() { 
    return this.bankBranches; 
} 

public void setBankBranches(List<BankBranch> bankBranches) { 
    this.bankBranches = bankBranches; 
} 


public BankBranch addBankBranches(BankBranch bankBranches) { 
    getBankBranches().add(bankBranches); 
    bankBranches.setBank(this); 

    return bankBranches; 
} 

public BankBranch removeBankBranches(BankBranch bankBranches) { 
    getBankBranches().remove(bankBranches); 
    bankBranches.setBank(null); 

    return bankBranches; 
} 

//bi-directional many-to-many association to Investor 
@ManyToMany(mappedBy="banks") 
public List<Investor> getInvestors() { 
    return this.investors; 
} 

public void setInvestors(List<Investor> investors) { 
    this.investors = investors; 
} 



//bi-directional many-to-one association to InvestorJointHolder 
@OneToMany(mappedBy="bank") 
public List<InvestorJointHolder> getInvestorJointHolders() { 
    return this.investorJointHolders; 
} 

public void setInvestorJointHolders(List<InvestorJointHolder> investorJointHolders) { 
    this.investorJointHolders = investorJointHolders; 
} 


public InvestorJointHolder addInvestorJointHolders(InvestorJointHolder investorJointHolders) { 
    getInvestorJointHolders().add(investorJointHolders); 
    investorJointHolders.setBank(this); 

    return investorJointHolders; 
} 

public InvestorJointHolder removeInvestorJointHolders(InvestorJointHolder investorJointHolders) { 
    getInvestorJointHolders().remove(investorJointHolders); 
    investorJointHolders.setBank(null); 

    return investorJointHolders; 
} 

//bi-directional many-to-one association to PoBank 
@OneToMany(mappedBy="bank") 
public List<PoBank> getPoBanks() { 
    return this.poBanks; 
} 

public void setPoBanks(List<PoBank> poBanks) { 
    this.poBanks = poBanks; 
} 


public PoBank addPoBanks(PoBank poBanks) { 
    getPoBanks().add(poBanks); 
    poBanks.setBank(this); 

    return poBanks; 
} 

public PoBank removePoBanks(PoBank poBanks) { 
    getPoBanks().remove(poBanks); 
    poBanks.setBank(null); 

    return poBanks; 
} 

//bi-directional many-to-many association to PoSubscription 
@ManyToMany(mappedBy="banks") 
public List<PoSubscription> getPoSubscriptions() { 
    return this.poSubscriptions; 
} 

public void setPoSubscriptions(List<PoSubscription> poSubscriptions) { 
    this.poSubscriptions = poSubscriptions; 
} 

}

我的選擇列表與上述方法public InvestorSetupBusinessObj()正確填充,但是當我選擇一家銀行,並保存它,它提供了以下異常。任何幫助非常感謝。

堆棧跟蹤

javax.el.PropertyNotFoundException: /eipo/investorRegistration.xhtml @367,59 itemLabel="#{dbanks.name}": Property 'name' not found on type java.lang.String 
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) 
at org.primefaces.component.picklist.PickList.getItemLabel(PickList.java:130) 
at org.primefaces.component.picklist.PickListRenderer.encodeOptions(PickListRenderer.java:226) 
at org.primefaces.component.picklist.PickListRenderer.encodeList(PickListRenderer.java:192) 
at org.primefaces.component.picklist.PickListRenderer.encodeMarkup(PickListRenderer.java:86) 
at org.primefaces.component.picklist.PickListRenderer.encodeEnd(PickListRenderer.java:59) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:877) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1826) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1822) 
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeRow(PanelGridRenderer.java:148) 
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeStaticBody(PanelGridRenderer.java:110) 
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeBody(PanelGridRenderer.java:63) 
at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:49) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:877) 
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:74) 
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57) 
at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:204) 
at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:121) 
at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:58) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:877) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1826) 
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:847) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1819) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1822) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1822) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:447) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:125) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
+0

value =「#{eipoIRBean.dualbanks}」和value =「#{eipoIRBean.dualbanks}」。你錯過了{#之後。 – Adarsh

+0

@Adarsh我粘貼代碼時錯過了它,更正了它 – Anas

回答

2

你必須定義一個轉換器,使其工作,就必須使用選擇列表時,作爲primefaces手冊指導:

<p:pickList ... var="dbanks" itemValue="#{dbanks}" converter="BankConverter" > 

看看這裏:Custom converter in JSF 2.0

+0

爲什麼我需要這樣做?問題出現在我設置雙列表目標時,雙列表源工作正常。 – Anas

+2

@anas - 在選取列表中使用POJO時,必須使用轉換器。請參閱primefaces手冊 – kolossus

+0

哦,等待,轉換器是必要的,我會在糾正和運行後接受答案。謝謝@kolossus and omar – Anas

相關問題