私は netbeans 7.2 と primefaces 3.4 を使用しています。データベース、データベースからのエンティティ クラス、およびエンティティ クラスからの jsf ページを作成しました。私は今、データベースの1つからの情報を含むデータテーブルを表示するページを設定しようとしています - Userdetails - (完了) 行をクリックすると、ダイアログが開き、一連のプリセットオプションを追加できますそのユーザーが他のテーブルに追加される前に編集されます。
ただし、選択した行から情報を表示するのに問題があります。コードを可能な限りクリーンアップし、関連する部分だけに制限しました。何か追加または削除する必要がある場合は、教えてください.
この質問に関するいくつかの回答を既に見ましたが、それらを機能させることができませんでした。行選択アプローチで、コマンドボタンアプローチと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 からのプリセットが取得されません。つまり、#{userdetailsController.selected.username} が空白になります。Adduser をクリックすると、次のエラーが表示されます (完全な Stacktrace 付き)。
警告: StandardWrapperValve[Faces Servlet]: PWC1406: サーブレット Faces Servlet の Servlet.service() が例外 javax.el.PropertyNotWritableException をスローしました: /securedadmin/adminsetup.xhtml @146,110 value="": com.sun でのセット操作の構文が不正です。 faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:136) で javax.faces.component.UIInput.updateModel(UIInput.java:818) で javax.faces.component.UIInput.processUpdates(UIInput.java:735) でjavax.faces.component.UIComponentBase.processUpdates(UIComponentBase.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.org.primefaces.component.layout.Layout.processUpdates(Layout.java:252) で javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1242) で javax.faces.component で processUpdates(UIComponentBase.java:1242) com.sun. faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java: 118) org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) で org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) で org.apache.catalina.core.StandardPipeline .doInvoke(StandardPipeline.java:655) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) org. apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at 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.execute(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) com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) で com.sun.grizzly.com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) の ContextTask.run(ContextTask.java:71) com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java: 513) java.lang.Thread.run(Thread.java:662) で
編集:以下は私が愚かだっただけです。すぐに他の提案を試しますが、これは適切なIDを要求するためのものでした。おっとっと。
また、それぞれについて次のように言われています。
警告: ID userid を持つコンポーネントがビューに見つかりません。
ありがとう。