如何解决在页面加载之前使用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 举报,一经查实,本站将立刻删除。