我的实际场景是一个使用 Mojarra 2.2.5 的简单JSF项目
我正在尝试以编程方式获取组件实例(通过“findComponent”方法或绑定...)并设置一些属性(单击“ ChangeColor ”按钮)。
之后,使用任何其他操作(例如单击“发送”按钮),先前的更改将被忽略!!
看来changeColor方法不会更新ViewState!
示例代码如下:
<h:form id="form">
<h:panelGrid columns="1">
<h:inputText id="input" binding="#{page9.input}"/>
<h:commandButton value="Change BackColor" action="#{page9.changeColor}"/>
<h:commandButton value="Send" action="#{page9.dummy}" />
</h:panelGrid>
</h:form>
相对的 RequestScope bean
@ManagedBean(name="page9")
@RequestScoped
public class Page9 implements Serializable {
private static final long serialVersionUID = 1L;
private HtmlInputText input;
public HtmlInputText getInput() {
return input;
}
public void setInput(HtmlInputText input) {
this.input = input;
}
public void changeColor(){
FacesContext fc = FacesContext.getCurrentInstance();
HtmlInputText hit = (HtmlInputText) fc.getViewRoot().findComponent(":form:input");
hit.setStyle("background-color:blue");
}
public void dummy(){
}
}
一些重要的考虑因素:
1)出于兼容性原因,我必须使用RequestScope
2)将javax.faces.PARTIAL_STATE_SAVING设置为“false”一切正常(!)。
3)尝试使用 MyFaces 2.2.3库一切正常(!)。
你怎么看? 感谢。