【问题标题】:Get rendered html code in Backing Component from Composite Component从 Composite Component 获取 Backing Component 中渲染的 html 代码
【发布时间】:2017-06-17 13:03:53
【问题描述】:

如何在后台组件中获取已发布的表单数据 processUpdates方法?

@Override
    public void processUpdates(FacesContext context) {
//get here rendered html code
}

或者我可以在decode方法中获取发布的表单数据吗?

[编辑]: 我的目标是获取发布的表单数据 - 不是获取生成的 html 代码(抱歉,我不准确)

【问题讨论】:

  • 试图从生成的 HTML 中获取输入值是疯狂的。你有一个成熟的服务器端框架,其主要目标是模拟有状态的通信。请发布您的 xhtml (facelets) 代码,以便我了解您想要实现的目标,而不是您想要解决的问题:) 也许您想要 PrimeFaces custom layout radio button input 之类的东西?
  • @MicheleMariotti 对不起,我想说的是,我需要获取发布的表单数据,而不是生成的 html。我编辑了我的问题。

标签: jsf jsf-2.2 composite-component


【解决方案1】:

目前还不清楚您想要实现什么。我的意思是,在高水平。

UIComponent.decodeprocessUpdates 是中级生命周期 API,当您想要扩展框架时应该覆盖它们。

如果您只需要使用框架,则需要一个托管 bean,而不是 支持组件

此外,通常只有扩展 UIInput 的组件需要在这些阶段挂钩,因为它们绑定到 value="#{...}" 值表达式(它又引用了一个 托管 bean ,在大多数情况下),并且需要将这些值与绑定的表达式同步。

我怀疑你在无用地使你的生活复杂化:如果你对框架的运作方式没有很好的理解,那么挂钩到中级或低级 API 是一种真正的痛苦。

反正标准的请求参数decode成输入组件是这样的:

String clientId = this.getClientId(context);

Map<String, String> requestMap = context.getExternalContext().getRequestParameterMap();

String newValue = requestMap.get(clientId);
if (newValue != null) 
{
    this.setSubmittedValue(newValue);
}

请发布完整的 xhtml facelet 代码(不是复合代码,而是 使用 复合的 facelet),这样我就可以理解你想去哪里,我可以尝试为你指出使用正确的工具。

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2020-08-10
    • 2020-06-28
    • 2020-03-12
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多