2013-02-11 54 views
0

我正在使用netbeans 7.2和primefaces 3.4。我已經創建了一個數據庫,來自數據庫的實體類和來自實體類的jsf頁面。我現在試圖設置一個頁面,顯示包含來自其中一個數據庫的信息的數據表 - Userdetails - (完成),當單擊一行時,打開一個對話框以添加一組預設選項在該用戶被添加到另一個表之前進行編輯。顯示所選數據表的詳細信息select

雖然我無法從所選行顯示信息。我已經儘可能地清理了代碼,並將其限制在相關部分 - 如果需要添加或取出任何內容,請告訴我。

我已經看過這個問題的一些答案,我無法讓他們爲我工作。我在行選擇方法上嘗試了commandbutton方法和ajax。

package jsf; 

// LOTS OF IMPORTS 

@ManagedBean(name = "userdetailsController") 
//@ViewScoped 
@SessionScoped 
public class UserdetailsController implements Serializable { 

    //DECLARATIONS eg private Userdetails selectedElement; 

    public UserdetailsController() { 
    } 

// BUNCH OF PREGENERATED CODE OMITTED 

    public Userdetails getSelected() { 
     if (current == null) { 
      current = new Userdetails(); 
      selectedItemIndex = -1; 
     } 
     return current; 
    } 

    public String create() { 
     try { 
      getFacade().create(current); 
      JsfUtil.addSuccessMessage(ResourceBundle.getBundle("resources/Bundle").getString("UserdetailsCreated")); 
      return prepareCreate(); 
     } catch (Exception e) { 
      JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("resources/Bundle").getString("PersistenceErrorOccured")); 
      return null; 
     } 
    } 

    public void setSelectedElement(Userdetails selectedElement) { 
     this.selectedElement = selectedElement; 
    } 

    public Userdetails getSelectedElement() { 
     return selectedElement; 
    } 

    //COLUMN MODEL STUFF THAT WORKS FINE HERE 

} 

XHTML的東西

<p:dataTable var="userdetails" value="#{userdetailsController.elements}" 
       rowKey="#{userdetails.userid}" 
       scrollable="true" scrollRows="10" scrollHeight="150" 
       resizableColumns="true" 
       selection="#{userdetailsController.selectedElement}" 
       draggableColumns="true" selectionMode="single" paginator="true" 
       widgetVar="userdetails" id="elementsTable">  


     <p:ajax event="rowSelect" 
    update=":datatableForm:display" /> 


       <p:columns value="#{userdetailsController.columns}" var="column" columnIndexVar="colIndex" sortBy="#{userdetails[column.property]}" filterBy="#{userdetails[column.property]}"> 


        <f:facet name="header"> 
         #{column.header} 
        </f:facet> 

        #{userdetails[column.property]} 
       </p:columns> 

    <f:facet name="footer"> 
     <p:commandButton id="addDlgBtn" value="Add this user?" update=":datatableForm:display" oncomplete="addUser.show()"/> 
    </f:facet> 
      </p:dataTable> 
      </p:fieldset> 

這就是數據表是如何限制,並在對話框看起來是這樣,但有更多的選擇:

<p:dialog id="dlgAdd" header="Adding users" widgetVar="addUser"> 

     <p:panelGrid id="display" columns="2" cellpadding="4"> 

      <h:outputLabel value="#{bundle.CreateConnectiontableLabel_userid}" for="userid"/> 
      <h:outputText value="#{userdetailsController.selected.userid}" title="#{bundle.CreateConnectiontableTitle_userid}"/> 

      <h:outputLabel value="#{bundle.CreateConnectiontableLabel_username}" for="username"/> 
      <h:outputText value="#{userdetailsController.selected.username}" title="#{bundle.CreateConnectiontableTitle_username}"/> 

      <h:outputLabel value="#{bundle.CreateConnectiontableLabel_infovalue}" for="infovalue"/> 
      <h:inputText value="1" title="#{bundle.CreateConnectiontableTitle_infovalue}"/> 

     </p:panelGrid> 


    <p:commandButton id="addbtn" value="Add the User." update=":datatableForm" 
         actionListener="#{connectiontableController.create}" 
         onclick="addUser.close()"/> 


</p:dialog> 

然而,當我點擊添加按鈕時,我沒有得到那些來自selectedElement的預設,即#{userdeta ilsController.selected.username}變成空白。當我點擊增加會員,我得到以下錯誤(全文堆棧跟蹤):

警告:StandardWrapperValve [面臨的Servlet]:PWC1406: Servlet.service()進行的servlet面臨的Servlet拋出異常 javax.el。 PropertyNotWritableException:/securedadmin/adminsetup.xhtml @ 146,110 value =「」:設置操作的非法語法 com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:136) at javax.faces.component .UIInput.updateModel(UIInput.java:818)at javax.faces.component.UIInput.processUpdates(UIInput.java:735)at javax.faces.component.UIComponentBase.processUpdates(UIComponentB ase.java:1242) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 org.primefaces.component.dialog.Dialog.processUpdates(Dialog.java:366) 在的javax。 faces.component.UIForm.processUpdates(UIForm.java:281)在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242 ) 在 org.primefaces.component.layout.Layout.processUpdates(Layout.java:252) 在 javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 個javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) 在 javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1231) 在 com.sun.faces.lifecycle.UpdateModelValuesPhase.execute (UpdateModelValuesPhase.java:78) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax .faces.webapp.FacesServlet.service(FacesServlet的。的java:593)在 org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 在 有機apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 在 org.apache.catalina.core.StandardPipeline。調用(StandardPipeline.java:595) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 在 org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.jav一:331) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 在 com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call(ContainerMapper.java: 317) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 在 com.sun.grizzly.http .DefaultProtocolFilter.exe可愛(DefaultProtocolFilter.java:229) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 COM .sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask .java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask。 Java的:71)在 com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:513) 在java.lang.Thread.run(Thread.java:662)

編輯:以下只是我愚蠢,我會盡快嘗試其他建議,但這只是爲了要求適當的ID。哎呀。

我也告訴他們每個人:

警告:無法找到針對ID用戶標識的組成部分。

謝謝。

回答

3
javax.el.PropertyNotWritableException: /securedadmin/adminsetup.xhtml @146,110 value="": Illegal Syntax for Set Operation 
    at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:136) 
    at javax.faces.component.UIInput.updateModel(UIInput.java:818) 
    ... 

在行146字符的/securedadmin/adminsetup.xhtml 110你已經一個

<h:inputText value="" /> 

這是不對的。正如異常消息所告知的那樣,不可能對此執行setter方法操作。

要麼除去value=""

<h:inputText /> 

,或者它具有的getter/setter綁定到bean屬性,像這樣

<h:inputText value="#{bean.value}" /> 

這在神志清醒JSF教程的第1章說明。我建議通過一個。

+0

謝謝,那是爲此做的。我想我會經歷它。 – AodhanOL 2013-02-12 10:38:09

1

首先,我看到這個部分:

onclick="addUser.close()" 

我用獸皮()不會關閉。

此外,我不能在這裏看到,但是你的對話框和數據表單在單獨的形式嗎?你也可以使用ViewScoped。

還有一件事。在datatable中,將所選行分配給userdetailsController.selectedElement,並在您使用userdetailsController.selected的對話框中分配。做同樣的。

+0

謝謝你,這也幫助我找出另一個問題的根源。現在來解決它。 :) – AodhanOL 2013-02-13 11:46:07