gpt4 book ai didi

java - JSF 链接不工作(使用 Primefaces)

转载 作者:行者123 更新时间:2023-12-01 14:19:44 25 4
gpt4 key购买 nike

抱歉,真的很基本的问题...

我有一个显示在页面上的“留言板线程”列表。我希望能够单击其中一个并重定向到显示该线程详细信息的页面。尽管在谷歌上搜索了一段时间,但我仍在挣扎......

(顺便说一句,我正在使用 PrimeFaces)

这是我的“列表”页面中的相关代码:

<p:commandLink value="#{thread.title}" action="#{messageboardBean.showThread()}"> 
<f:param name="threadId" value="#{thread.id}" />
</p:commandLink>

(在 h:form 元素中)

这是我的命名 bean 的一部分(其他方法也可以)

...
@ManagedProperty(value="#{param.threadId}")
private Long threadId;
...
public String showThread() {
System.out.println("id is " + getThreadId());
return "messageboard/list";
}
...

如您所见,我的方法尚未实现,但甚至未被调用。谁能告诉我为什么?

顺便说一下,我也尝试过使用 h:link,同样(或类似)的问题。

谢谢!

更新 - 已解决

感谢下面的帮助,这是我的解决方案(我已将“留言板”重命名为“讨论”)。

链接是用这段代码生成的

值:在页面上显示什么,在我的例子中是我的讨论标题结果:指的是edit.xhtml,我要转到的faces文件...并且 [request] 参数将被称为“threadId”,并且在我的“thread”对象中具有 id 属性的值。

在 edit.xhtml 页面中,我得到了这个

<f:metadata>
<f:viewParam name="threadId" value="#{viewDiscussionBean.threadId}" />
<f:event type="preRenderView" listener="#{viewDiscussionBean.loadDiscussion}" />
</f:metadata>

请注意,'threadId' 与第一页中的参数名称相同,并且绑定(bind)到我的 viewDiscussionBean 的 threadId 属性。

然后,一旦在我的 bean 上设置了所有参数,我就调用我的 viewDiscussionBean 的 loadDiscussion 方法。由于它现在具有 threadId 属性,因此它能够执行此操作(见下文)

我的 viewDiscussionBean 具有以下托管属性(我认为 viewParam 标记设置了这个,而不是相反)。

@ManagedProperty(value="#{param.threadId}")
private Long threadId;

private Discussion thread;

所以一旦设置好了,这个方法就可以运行了(因为它现在有一个 ID)

public String loadDiscussion() {
thread = mbDao.find(threadId);
return "edit";
}

这只是使用 DAO(使用 Hibernate)来查找具有该 ID 的讨论线程,并将其设置在 bean 中。然后……

在我的 edit.xhtml 页面中,我可以使用类似的东西访问讨论线程中的值

<h:outputText value="#{viewDiscussionBean.thread.message}" />

瞧!谢谢。

最佳答案

UICommand 有很多可能的原因未调用操作。你可以在这里找到它们:commandButton/commandLink/ajax action/listener method not invoked or input value not updated除其他外,表单缺失、嵌套表单或表单其他地方的转换/验证错误、位于其数据模型未正确保存的数据表中等等。

至于您的特定功能需求,最好使用 <h:link> .命令链接发出 POST 请求,在您的特定情况下,该请求不会以 URL 中带有线程 ID 的可 Collection URL 结尾。 <h:link>创建一个可添加书签和搜索机器人索引的完全有值(value)的链接。

例如

<h:link value="#{thread.title}" outcome="messageboard/list"> 
<f:param name="threadId" value="#{thread.id}" />
</h:link>

这不需要表单或操作方法。你只需要移动那个 @ManagedProperty到与 messageboard/list 关联的 bean ,或者用 <f:viewParam> 代替它在messageboard/list允许更细粒度的验证/转换的 View 。

另见:

关于java - JSF 链接不工作(使用 Primefaces),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com