gpt4 book ai didi

ajax - JSF - 在 ajax 调用中传递参数 - 这段代码有什么问题?

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

当我执行 ajax 调用时,我需要将参数传递给 bean。

我的 bean 是这样的:

@ManagedBean
@RequestScoped
public class Selector {
@ManagedProperty(value="#{param.page}")
private String page;

@PostConstruct
public void init() {
if(page==null || page.trim().isEmpty()) {
this.page="homepage";
}

System.out.println(this.page);
}

public String getPage() { return page; }
public void setPage(String page) { this.page=page; }
}

而且,当我执行 ajax 调用时,我需要(由于我想呈现不同的上下文)页面参数。所以我这样做了:
// in this moment selector.page = articles
<h:inputHidden value="#{selector.page}" id="page" />

<h:commandLink>
<f:setPropertyActionListener target="#{articlesSelector.order}" value="1" />
<f:ajax event="click" render=":articlesContent"/>
<h:graphicImage value="img/arrow_up.png" alt="Arrow Up"/>
</h:commandLink>

但是,在应用请求阶段,页面仍然是“主页”。它应该从请求中获取页面参数,将其应用于组件树并呈现“文章”上下文。为什么不发生?

干杯

最佳答案

因为<h:inputHidden>的值仅在更新模型值阶段设置。这确实是 JSF 中长期存在的一种不直观的行为。我曾经报告过一个关于此的问题,但这是“按设计”关闭的。

有几种方法可以解决这个问题,其中包括 View 范围。在您的特定情况下,您可以使用 <f:param> 而不是 <h:inputHidden> :

<h:commandLink>
<f:param name="page" value="#{selector.page}" />
<f:setPropertyActionListener target="#{articlesSelector.order}" value="1" />
<f:ajax event="click" render=":articlesContent"/>
<h:graphicImage value="img/arrow_up.png" alt="Arrow Up"/>
</h:commandLink>

然后它将作为请求参数可用 #{param.page}并在您的请求范围内的 bean 中设置为 @ManagedProperty .

关于ajax - JSF - 在 ajax 调用中传递参数 - 这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335363/

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