gpt4 book ai didi

jsf - 如何访问用户界面 :param value in the managed bean

转载 作者:行者123 更新时间:2023-12-04 13:41:43 26 4
gpt4 key购买 nike

我已经看到这个问题问了很多,但是,没有一个得到正确回答,所以我决定再问一次。所以如果我有这个:如果我在 A.xhtml和我

<ui:include src="B.xhtml">
<ui:param name="formId" value="awesome Id"/>
</ui:include>

所以在 B.xhtml , 我可以做这个
<h:outputText value="#{formId}"/>

当我运行时 A.xhtml ,我会看到 awesome Id打印在屏幕上。但是,我如何访问 formId 的值在支持 bean 中。我看里面 FacesContext.getCurrentInstance().getAttributes()FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()而我似乎无法找到它。为了更进一步,所以我尝试:

B.xhtml ,我现在有
<h:inputHidden id="hiddenFormId" value="#{formId}"/>
<h:outputText value="#{formId}"/>

这个想法是我可以访问 formId 的值在 RequestParameterMap下键 hiddenFormId .但现在如果我有:
<h:form id="myForm">
<ui:include src="B.xhtml">
<ui:param name="formId" value="awesome Id"/>
</ui:include>
<a4j:commandButton render="myForm" value="My Button"/>
</h:form>

那么如果我查看 POST 请求(在 chrome 或 ff Debug模式中时),我会得到这个错误
<partial-response><error><error-name>class javax.faces.component.UpdateModelException</error-name><error-message><![CDATA[/B.xhtml @9,61 value="${formId}": /index.xhtml @27,61 value="awesome Id": Illegal Syntax for Set Operation]]></error-message></error></partial-response>
所以 如何访问托管 bean 中的 ui:param 值?

最佳答案

<ui:param>在幕后存储实际上是依赖于实现的。在 Mojarra 中,它存储为 FaceletContext 的一个属性。因此在您的支持 bean 中可用,如下所示:

FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
String formId = (String) faceletContext.getAttribute("formId");

然而,该值是否可用取决于时间。如果您的支持代码在执行包含的渲染时正在运行,那么它将可用,否则它将是 null .

我记得 MyFaces 的做法有点不同,但我不再记得细节了,而且我现在手头也没有它的来源。

至于您的 <h:inputHidden>尝试, <h:inputHidden>不太适合将 View 定义的隐藏参数与表单提交一起传递的唯一目的。只需使用纯 HTML 即可。

<input type="hidden" name="hiddenFormId" value="#{formId}" />

它将作为具有此名称的请求参数提供。

关于jsf - 如何访问用户界面 :param value in the managed bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533865/

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