在页面加载之前使用f:param在OneToMany中生孩子

问题描述

我遇到了无法找到答案的问题。

我正在使用Eclipse,postgresql,Wildfly17和primefaces 7.0。 我有两个数据库,与OneToMany关系连接。首先是害虫及其性质。在第二个数据库中,以不同的语言显示了每种有害生物的名称(英语索引为1,德语为4,...)

在第一页上,在第一个数据库(Side One)中搜索特定的害虫。结果显示在其下面的数据表中。数据表的最后一列是“编辑”按钮。通过单击它,您将进入第二页,其中包含特定虫害两个数据库的数据。

实体SmPests是:

Integer idPest;
String latinName;
String code:
@OneToMany(fetch = FetchType.LAZY,mappedBy = "smPests",cascade = CascadeTyoe.ALL,orphanRemoval = true)
List<SmPestsNames> smPestsNames = new ArrayList<SmPestsName>();
...

实体SmPestsNames是:

Integer idPest;
int idLanguage;
String name;

在SmPestList.xhtml中,我有:

<p:button outcome="SmPestsEditable"update="pestsListEdit" value="Edit" style="fontsize:3em" title="edit">
<f:param name="id" value="#{zuzek.idPest}" />
<f:param name="code" value="#{zuzek.code}" />
<f:param name="lname" value="#{zuzek.latinName}" />

在SmPestsEdit.xhtml中,我有:

<f:viewParam name="id" value="#{smPestsEditable.idPest}" />
<f:viewParam name="code" value="#{smPestsEditable.code}" />
<f:viewParam name="lname" value="#{smPestsEditable.latinName}" />

我的问题是,当第二页加载时,支持bean尚未检测到idPest(由f:param传递),如果我想显示第二个数据库的名称,我会得到

java.lang.NullPointerException

如果我设置了静态idPest,它可以工作,但不会显示当前元素的名称。

页面加载程序之后确实找到了正确的子级,但是我希望它在页面加载之前发生。

我尝试过ManagedBean,但它已被弃用。

我也尝试过使用viewAction

<f:viewParam name="id" value="#{smPestsEditable.idPest}" />
<f:viewParam name="code" value="#{smPestsEditable.code}" />
<f:viewParam name="lname" value="#{smPestsEditable.latinName}" />
<f:viewAction action="#{smPestsEditable.onload}" />
public void onload() {
   idPest = id; // to avoid NullPointerException I use static idPest and try to change it to current before page loads
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...