【问题标题】:Find and modify JSF component in backing bean在 backing bean 中查找和修改 JSF 组件
【发布时间】:2015-12-06 14:08:09
【问题描述】:

我在视图中有一个<h:outputText>。 在控制器中,我想使用下面的代码来操作 valuestyle 属性。有可能吗?

private void updateMsgCreateRegistrationKey(String objectName, String msg, String msgType){
    UIComponent UIOutputText = getUIComponentOfId(FacesContext.getCurrentInstance().getViewRoot(), objectName);
    if (UIOutputText != null){
        UIOutputText.setRendered(true);
        if(msgType.equalsIgnoreCase("Info")){

        }else if(msgType.equalsIgnoreCase("Error")){

        }
    }
    RequestContext.getCurrentInstance().update(objectName);
    FacesContext.getCurrentInstance().renderResponse();
}

【问题讨论】:

  • “有可能吗??”试试看……
  • 可能是这样,但为什么。

标签: jsf controller components


【解决方案1】:

这不是正常的做法。您通常不会从控制器上操作视图。相反,在 MVC 中,您让控制器(支持 bean)操作模型(支持 bean 属性)并让视图(XHTML 文件)检查模型(支持 bean 属性)。

private String value;
private String styleClass;
private boolean rendered;

public void someMethod() {
    value = "some value";
    styleClass = "someClass";
    rendered = true;
}

// +getters (no setters necessary)
<h:outputText value="#{bean.value}"
              styleClass="#{bean.styleClass}"
              rendered="#{bean.rendered}" />

甚至没有rendered属性:

<h:outputText value="#{bean.value}"
              styleClass="#{bean.styleClass}"
              rendered="#{not empty bean.value}" />

每当您认为需要从控制器中的视图中获取 UIComponent 时,请立即停下来,并三思而后行,如果您真的以正确的方式做事。

另见:

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2014-08-11
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多