解決したいこと
いつもお世話になっております。
NetBeansを使い、PrimeFaceで検索機能があるデータテーブルを作成しました。numberカラムにcommandLinkをつけて、レコードを取得するメソッドを付与してます。
また同じページ内に入力欄を設けてcommandLinkで取得した値を表示し編集できるようにしてます。
詰まっている事
検索処理を実行し、テーブル内に表示されたリンクを押すと値がnullになってしまい、入力欄に反映されません。
※検索する前(初期画面)では値の受け渡しが上手くいき、入力欄に表示されます.
怪しいのが
検索ボタンの
onkeyup="PF('customersTable').filter()"
クリアボタンの
onclick="PF('customersTable').clearFilters()"
この処理が行われた時にnullになってしまっているのではないかと思います。
試しにクリアのonclick="PF('customersTable').clearFilters()" を消して、入力欄だけをクリアする様にすると、値の受け渡しができました。
そのあとどうすればよいかわかりません。。。
また、質問の内容以外にコードの書き方や記述の仕方に修正内容などありましたらご指摘頂けると幸いです。
よろしくお願いいたします。
参考サイト
https://www.primefaces.org/showcase/ui/data/datatable/filter.xhtml?jfwid=f4b2b
参考書
https://k-webs.jp/JavaEE/
update.xhtml
html
1 <h:form id="form"> 2 <p:dataTable id="dataTable" var="data" 3 value="#{bb.all}" 4 widgetVar="customersTable" emptyMessage="見つかりませんでした"> 5 6 <f:facet name="header"> 7 <div class="p-d-flex p-ai-center p-jc-between"> 8 <p:inputText id="globalFilter" onkeyup="PF('customersTable').filter()" style="width:10rem" placeholder="Enter keyword" /> 9 </div> 10 11 <p:commandButton value="クリア" update=":form:createField" 12 action="#{bb.clear}" 13 onclick="PF('customersTable').clearFilters()" icon="pi pi-times"> 14 </p:commandButton> 15 16 </f:facet> 17 18 <p:column id="edit" headerText="number" filterBy="#{data.number}" 19 filterMatchMode="contains" filterStyle="display:none;" > 20 <p:commandLink actionListener="#{bb.edit(data)}" 21 process="@this" update=":form:createField"> 22 <h:outputText value="#{data.number}" /> 23 </p:commandLink> 24 </p:column> 25 26 27 <p:column headerText="name" filterBy="#{data.name}" 28 filterMatchMode="contains" filterStyle="display:none;"> 29 <h:outputText value="#{data.name}" /> 30 </p:column> 31 32 33 <p:column headerText="mail" filterBy="#{data.mail}" 34 filterMatchMode="contains" filterStyle="display:none;"> 35 <h:outputText value="#{data.mail}" /> 36 </p:column> 37 38 </p:dataTable> 39 40 <p:panelGrid columns="8" id="createField"> 41 <p:outputLabel value="name:" /> 42 <p:inputText id="code" value="#{bb.number}"/> 43 44 <p:outputLabel value="名称:" /> 45 <p:inputText id="codename" value="#{bb.name}"/> 46 47 <p:outputLabel value="サブコード:" /> 48 <p:inputText id="subcode" value="#{bb.mail}"/> 49 50 </p:panelGrid> 51 52 <h:messages style="font-size:1rem;" /> 53 54 <div class="operation" style="text-align: center; margin-top: 2rem;"> 55 <p:commandButton value="更新" 56 action="#{bb.update()}" 57 onclick="return confirm('更新してよろしいですか?')" 58 style="margin-right: 1.5rem;" ajax="false" update="@all" 59 icon="pi pi-replay"> 60 </p:commandButton> 61 62 <p:commandButton value="削除" 63 action="#{bb.delete()}" 64 onclick="return confirm('削除してよろしいですか?')" ajax="false" 65 style="margin-right: 1.5rem;" icon="pi pi-trash" update="@all"> 66 </p:commandButton> 67 68 </div> 69 </h:form>
Bb.java
java
1import java.io.Serializable; 2import java.util.List; 3import java.util.logging.Logger; 4import javax.ejb.EJB; 5import javax.inject.Inject; 6import javax.inject.Named; 7import javax.validation.constraints.*; 8import org.springframework.context.annotation.Scope; 9 10@Named 11@Scope("session") 12public class Bb implements Serializable { 13 14 @NotNull 15 private Integer number; 16 @NotBlank 17 private String name; 18 @Email 19 private String mail; 20 21 @EJB 22 MeiboDb db; 23 @Inject 24 transient Logger log; 25 26 public String edit(Meibo meibo) { // 編集データのセット 27 number = meibo.getNumber(); 28 name = meibo.getName(); 29 mail = meibo.getMail(); 30 return null; 31 } 32 33 public void update() { // 更新 34 Meibo meibo = new Meibo(number, name, mail); 35 db.update(meibo); 36 clear(); 37 } 38 39 public String delete(Meibo meibo) { // 削除 40 db.delete(meibo); 41 return null; 42 } 43 public List<Meibo> getAll() { // 全データをListにいれて返す 44 return db.getAll(); 45 } 46 47 public String clear() { 48 number = null; 49 name = null; 50 mail = null; 51 return null; 52 }
あなたの回答
tips
プレビュー