我在视图中有一个<h:outputText>
。在控制器中,我想使用下面的代码来操作value
和style
属性。这可能吗?
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();
}
这不是正常的方法。你通常不会从控制器上操作视图。相反,在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
时,立即停下来并仔细考虑一下你是否真的在用正确的方法做事情。
参见:
- 如何'绑定'属性在JSF中工作吗?何时以及如何使用?