gpt4 book ai didi

jsf -

inside is not invoked 的 Action

转载 作者:行者123 更新时间:2023-12-04 02:52:48 24 4
gpt4 key购买 nike

我想做这样的事情(根据某些条件重定向到不同的页面!):

<ui:fragment rendered="#{projectPageBean.availableMethods}">
<p:commandButton id="test"
value="View Instrument"
action="instrumentLayout?faces-redirect=false"/>
</ui:fragment>
<ui:fragment rendered="#{not projectPageBean.availableMethods}">
<p:commandButton id="test1"
value="View Instrument"
action="methodLayout?faces-redirect=false"/>
</ui:fragment>

但是这种构造似乎不起作用;永远不会执行操作属性中的页面重定向!

我怎样才能使这种行为正确?

最佳答案

在处理表单提交期间,rendered输入/命令组件及其所有父组件的属性被重新评估,作为防止篡改请求的一部分。如果它评估 false ,那么任何子输入/命令组件都不会被解码,提交的值也不会被设置,调用的操作也不会被排队。

显然这就是这里发生的事情。将 bean 放在 View 范围内应该可以解决它。

@ManagedBean
@ViewScoped
public class ProjectPageBean {}

这样,只要您通过 (ajax) 回发与同一 View 进行交互,bean 就会一直存在。

另见:


与具体问题无关,但是使用命令按钮进行普通的页面到页面导航是很奇怪的。最好为此使用常规按钮。

<ui:fragment rendered="#{projectPageBean.availableMethods}">
<p:button id="test"
value="View Instrument"
outcome="instrumentLayout"/>
</ui:fragment>
<ui:fragment rendered="#{not projectPageBean.availableMethods}">
<p:button id="test1"
value="View Instrument"
outcome="methodLayout"/>
</ui:fragment>

这也将解决具体问题。它只会在指定的 URL 上发送一个普通的 GET 请求,而不是执行回发,导致所有 JSF 表单处理运行,最终发送另一个 GET 请求作为重定向。这样就不那么笨拙了。请注意,您可以安全地将这些按钮放在 <h:form> 之外。这样。

如果你制作它们 <h:link styleClass="ui-button ui-state-default ui-corner-all">而不是 <p:button> ,那么它对 SEO 更加友好(即像 Googlebot 这样的搜索机器人可以更好地找到它们并为其编制索引)。

另见:

关于jsf - <p :commandButton> inside <ui:fragment rendered> is not invoked 的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297257/

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