问题描述
有没有办法将整个List 作为f:param传递?
我有两个通过双向OneToMany / ManyToOne关系连接的数据库。首先,我具有元素及其属性(名称除外),它通过id与第二个数据库连接,第二个数据库使用不同的语言命名(每种语言都有其自己的id。
我还有两页。首先,我在第一个数据库中搜索符合条件的元素。结果显示在数据表中,最后一列带有“编辑”按钮。
当您单击该行中的“编辑”按钮时,它将在第二页上将您发送给您,该页面上应显示两个数据库中该元素的属性。
使用f:param可以将id发送到其他页面,但是在页面上尚未设置id的加载值,因此无法从第二个数据库加载值(我得到nullpointerexception)。如果我将ID设置为静态。它会加载,但始终相同。
我使用postgresql,primefaces和Wildfly17。如果我忘了提些什么,请告诉我。
我的代码:
SmPestEditable.xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<f:metadata>
<f:viewParam name="id" value="#{smPestsEditable.id}" />
<f:viewParam name="code" value="#{smPestsEditable.code}" />
<f:viewParam name="lname" value="#{smPestsEditable.latinName}" />
<f:viewParam name="irecog" value="#{smPestsEditable.imgRecognition}" />
<f:viewAction action="#{smPestsEditable.onload}" />
</f:metadata>
<h:messages />
<h:head></h:head>
<h:body>
<style type="text/css">
.ui-row-editor .ui-row-editor-pencil {
margin-left:8px;
}
</style>
<h:form id="pestsListEdit">
<p:growl id="msgs" showDetail="true" />
<p:panel id="SearchPest" header="EDIT PEST" toggleable="true"
closable="true" toggleSpeed="500" closeSpeed="500" widgetVar="panel"
style="margin-bottom:20px">
<p:panelGrid columns="2">
<h:outputLabel for="Id" value="Id" />
<h:outputText value="#{request.getParameter('id')}"/>
<h:outputLabel for="slo" value="lo" />
<h:outputText value="#{request.getParameter('id')}"/>
<h:outputLabel for="Code" value="Code" />
<p:inputText id="Code" value="#{smPestsEditable.code}" label="Code" />
<h:outputLabel for="lnme" value="Latin Name" />
<p:inputText id="LatinName" value="#{smPestsEditable.latinName}" label="latin" />
<f:facet name="footer">
<p:commandButton value="CHECK"
actionListener = "#{smPestsEditable.saveButton}"
action = "SmPestsList?faces-redirect-true" />
<p:linkButton outcome="SmPestsList" value="CLOSE"
style="margin-right:20px;">
</p:linkButton>
</f:facet>
</p:panelGrid>
</p:panel>
<p:dataTable var="ime" value="#{smPestsEditable.imena}">
<p:column headerText="ID PEST NAME">
<h:outputText value="#{ime.idPestName}" />
</p:column>
<p:column headerText="LANGUAGE">
<h:outputText value="Srpski"
rendered="#{ime.idLanguage eq 12}" />
<h:outputText value="Français"
rendered="#{ime.idLanguage eq 13}" />
<h:outputText value="Italiano"
rendered="#{ime.idLanguage eq 8}" />
<h:outputText value="English"
rendered="#{ime.idLanguage eq 4}" />
<h:outputText value="Português"
rendered="#{ime.idLanguage eq 9}" />
<h:outputText value="Deutsch"
rendered="#{ime.idLanguage eq 11}" />
<h:outputText value="Magyar"
rendered="#{ime.idLanguage eq 10}" />
<h:outputText value="Português"
rendered="#{ime.idLanguage eq 14}" />
<h:outputText value="Yкраїнський"
rendered="#{ime.idLanguage eq 15}" />
</p:column>
<p:column headerText="DISPLAY NAME">
<p:inplace id="name">
<p:inputText value="#{ime.name}" label="Name" />
</p:inplace>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
SmPestEditable.java:
package si.david;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.faces.annotation.ManagedProperty;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.FieldResult;
import javax.persistence.Query;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.TypedQuery;
import si.david.SmPests;
import si.david.SmPestsNames;
import org.hibernate.annotations.CreationTimestamp;
import org.junit.Before;
import org.primefaces.event.RowEditEvent;
@Named(value="smPestsEditable")
@RequestScoped
public class SmPestsEditable {
private List<SmPestsNames> pests = new ArrayList<SmPestsNames>();
private EntityManager em =null;
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
private int stevilka;
private int id;
private int idPest=55;
private String sloName;
SmPests zuzek1=loadPestById(idPest);
private String code = zuzek1.getCode();
private String oldCode = code;
private String latinName = zuzek1.getLatinName();
private String oldLatinName = latinName;
private String refLink = zuzek1.getRefLink();
private String oldRefLink = refLink;
private Integer imgRecognition = zuzek1.getImgRecognition();
private Integer oldImgRecognition = imgRecognition;
private Integer hideScore = zuzek1.getHideScore();
private Integer oldHideScore = hideScore;
private Integer recognitionModel = zuzek1.getRecognitionModel();
private Integer oldRecognitionModel = recognitionModel;
private Double alarmThresholdUp = zuzek1.getAlarmThresholdUp();
private Double oldAlarmThresholdUp = alarmThresholdUp;
private Double alarmThresholdLow = zuzek1.getAlarmThresholdLow();
private Double oldAlarmThresholdLow = alarmThresholdLow;
List<SmPestsNames> imena = zuzek1.getSmPestsNames();
private Long idPestName;
private int idLanguage;
private String name;
private LocalDateTime dInsert;
private Long idInserter;
private LocalDateTime dUpdate;
private Long idUpdater;
SmPests zuzek;
public void onload() {
try {
System.out.println(" ONLOAD: id "+id);
System.out.println(" idpest "+idPest);
} catch (Exception e) {
System.out.println(" Can’t find id!");
}
}
public void saveButton() {
System.out.println("SAVE button");
try {
pestsNames(id);
System.out.println("Sprintano pestnames(id)");
} catch (Exception e) {
System.out.println("Ujej!");
}
}
public void pestsNames(int id) {
EntityManager em =null;
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
em = emf.createEntityManager();
SmPests zuzek = em.find(SmPests.class,id);
try {
List<SmPestsNames> imena = zuzek.getSmPestsNames();
for(SmPestsNames s : imena) {
System.out.print(s.getIdPestName());
System.out.print(" | "+s.getIdLanguage());
System.out.println(" | "+s.getName());}
} catch (Exception e) {
System.out.println("Ujej!");
}
}
private SmPests loadPestById(int id) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
EntityManager em = emf.createEntityManager();
SmPests zuzek = em.find(SmPests.class,id);
return zuzek;
}
}
SmPestList.xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<style type="text/css">
.ui-row-editor .ui-row-editor-pencil {
margin-left:8px;
}
</style>
<h:form id="pestsList">
<p:growl id="msgs" showDetail="true" />
<p:panel id="SearchPest" header="Search for pests" toggleable="true"
closable="true" toggleSpeed="500" closeSpeed="500" widgetVar="panel"
style="margin-bottom:20px">
<p:panelGrid columns="2">
<h:outputLabel for="Code" value="Code" />
<p:inputText id="Code" value="#{smPestsList.code}" label="Code" />
<h:outputLabel for="Latin" value="Latin Name" />
<p:inputText id="Latin" value="#{smPestsList.latinName}"
label="Latin name" />
<h:outputLabel for="Recog" value="Image Recognition" />
<p:selectOneMenu id="selectOne">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItem itemLabel="SEGMENTATION" itemValue="1899" />
<f:selectItem itemLabel="R-CNN" itemValue="1900" />
<f:selectItem itemLabel="NONE - COPY MARKINGS" itemValue="1951" />
</p:selectOneMenu>
<f:facet name="footer">
<p:commandButton value="Search"
action="#{smPestsList.searchButton}" icon="ui-icon-check"
update=":pestsList:pestsTbl" />
<p:commandButton value="Search and Izpis"
action="#{smPestsList.pestsNames}" icon="ui-icon-check"
update=":pestsList:pestsTbl" />
<p:commandButton value="Search and Izpis arg"
action="#{smPestsList.pestsName(74)}" icon="ui-icon-check"
update=":pestsList:pestsTbl" />
<p:linkButton outcome="SmPestsEdit" value="Add"
style="margin-right:20px;">
</p:linkButton>
</f:facet>
</p:panelGrid>
</p:panel>
<p:dataTable id="pestsTbl" var="zuzek" value="#{smPestsList.pests}" editable="true"
style="margin-bottom:40px">
<f:facet name="header">
PESTS
</f:facet>
<p:column headerText="Id">
<h:outputText value="#{zuzek.idPest}" />
</p:column>
<p:column headerText="Code">
<h:outputText value="#{zuzek.code}" />
</p:column>
<p:column headerText="Latin Name">
<h:outputText value="#{zuzek.latinName}" />
</p:column>
<p:column>
<p:linkButton outcome="SmPestsEditable" update="pestsListEdit" value="Edit" style="font-size:3em" title="edit">
<f:param name="id" value="#{zuzek.idPest}" />
<f:param name="code" value="#{zuzek.code}" />
<f:param name="lname" value="#{zuzek.latinName}" />
</p:linkButton>
<p:button outcome="SmPestsEditable" icon="pi pi-trash" style="margin-right:5px;" title="delete">
<f:param name="id" value="30" />
</p:button>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
SmPestList.java:
package si.david;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.FieldResult;
import javax.persistence.Query;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.TypedQuery;
import si.david.SmPests;
import si.david.SmPestsNames;
import org.hibernate.annotations.CreationTimestamp;
import org.junit.Before;
import org.primefaces.event.RowEditEvent;
import org.primefaces.event.SelectEvent;
@Named(value="smPestsList")
@RequestScoped
public class SmPestsList {
private List<SmPests> pests = new ArrayList<SmPests>();
private EntityManager em =null;
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
private int idPest;
private String latinName;
private String code;
private String srpName;
private Long srpId;
private String fraName;
private Long fraId;
private String itaName;
private Long itaId;
private String engName;
private Long engId;
private String espName;
private Long espId;
private String deuName;
private Long deuId;
private String magName;
private Long magId;
private String porName;
private Long porId;
private String ukrName;
private Long ukrId;
private List<SmPestsNames> smPestsNames = new ArrayList<SmPestsNames>();
public void searchButton() {
EntityManager em =null;
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
em = emf.createEntityManager();
String query;
SmPests zuzek1 = new SmPests();
int parametri = 0;
if(!code.isEmpty()) {
parametri++;
}
if(!latinName.isEmpty()) {
parametri++;
}
System.out.println("parametri:" + parametri);
query ="SELECT DISTINCT s FROM SmPests s";
if( getCode() != null && !"".equals(getCode()) ) {
parametri ++;
}
if( getLatinName() != null && !"".equals(getLatinName()) ) {
parametri ++;
}
if(parametri >0) {
query = query + " WHERE ";
if( getCode() != null && !"".equals(getCode()) ) {
parametri --;
query = query +"(code LIKE UPPER('%" + getCode() + "%') OR code LIKE UPPER('" + getCode() + "%'))";
}
if( getCode() != null && !"".equals(getCode()) && getLatinName() != null && !"".equals(getLatinName()) )
query = query + " AND ";
if( getLatinName() != null && !"".equals(getLatinName()) ) {
parametri --;
query = query + "UPPER(latinName) LIKE '" + getLatinName() + "'";
}
}
System.out.println("query: " + query);
try {
List<SmPests> results = em.createQuery(query,SmPests.class).getResultList();
for(SmPests s : results) {
SmPests zuzek = new SmPests();
zuzek.setIdPest(s.getIdPest());
zuzek.setCode(s.getCode());
zuzek.setLatinName(s.getLatinName());
try {
List<SmPestsNames> imena = zuzek.getSmPestsNames();
for(SmPestsNames t : imena) {
System.out.print(t.getIdPestName());
System.out.print(" | "+t.getIdLanguage());
System.out.println(" | "+t.getName());
}
} catch (Exception e) {
System.out.println("Oops");
}
pests.add(zuzek);
}} catch (Exception e) {
System.out.println("doesn’t work”);
}
}
public void izpisime() {
System.out.println("pest data: ");
}
public void pestsName(int id) {
EntityManager em =null;
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
em = emf.createEntityManager();
String query;
SmPests zuzek = em.find(SmPests.class,id);
query ="SELECT DISTINCT s FROM SmPestNames s";
try {
List<SmPestsNames> imena = zuzek.getSmPestsNames();
for(SmPestsNames s : imena) {
if(s.getIdLanguage()==1) {
sloId=s.getIdPestName();
sloName=s.getName();
}
System.out.print(s.getIdPestName());
System.out.print(" | "+s.getIdLanguage());
System.out.println(" | "+s.getName());}
} catch (Exception e) {
System.out.println("pesetsName(int id) doesn’t work");
}
}
private SmPests loadPestById(int id) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
EntityManager em = emf.createEntityManager();
SmPests zuzek = em.find(SmPests.class,id);
System.out.println("naslooo");
try {
System.out.print(zuzek.getIdPest());
System.out.print(" | "+zuzek.getCode());
System.out.print(" | "+zuzek.getLatinName());
System.out.print(" | "+zuzek.getImgRecognition());
} catch (Exception e) {
System.out.println("Can’t fin pest id: " + id);
}
return zuzek;
}
private SmPestsNames loadNamesById(int id) {
System.out.println("loading pest");
EntityManagerFactory emf = Persistence.createEntityManagerFactory("tvTutorialPU");
EntityManager em = emf.createEntityManager();
SmPestsNames imena = em.find(SmPestsNames.class,id);
System.out.println("naslooo");
try {
System.out.print(imena.getIdPestName());
} catch (Exception e) {
System.out.println("Ni bla- ja!");
}
return imena;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)