我的xhtml文件中有以下特立尼达tr:inputText字段,该字段绑定到我的托管bean类中的"value1";inputttext字段的类型为:
org.apache.myfaces.trinidad.component.core.input.CoreInputText
<tr:inputText value="#{myBean.value1}" autoSubmit="true" immediate="true" valueChangeListener="#{myBean.textChangeListener}" styleClass="stylePageTextSmallColored">
</tr:inputText>
<tr:commandButton id="btnCommit" inlineStyle="width:20" immediate="true" text="Commit" action="#{myBean.doCommit()}" styleClass="styleButton">
</tr:commandButton>
public void textChangeListener(ValueChangeEvent e) {
log.debug(">> textChangeListener: value=["+(String)e.getNewValue()+"]");
}
public String doCommit() throws Throwable {
log.debug("In doCommit: value1="+value1);
value1 = "("+value1+")";
// I update my database with the modified value1 string here; the database has the correct
// updated value1 string (with the parentheses).
// How do I get the modified value1 (above) to echo back to the screen instantly
// inside the doCommit() method with its changes?
}
当我输入这个字段并改变它的值然后按下"commit"按钮时,我可以看到它的值在doCommit()方法中从屏幕上正确获得,textChangeListener()方法表明它已被调用。我想对"value1"变量进行一些更改,并立即将其值回显到屏幕上,而无需再进行屏幕提交;这可以作为doCommit()方法的一部分或通过xhtml文件中的其他机制/标记来完成吗?
请注意,这里使用的是Trinidad,上面列出了输入文本类。
更新……
谢谢你的参考Jasper;我希望在setter方法被调用和输入文本被改变(由setter方法)之后,SAME inputText字段能够自我更新。感谢你所指向的参考页面;我尝试了以下方法,它通过使用partialTriggers属性来工作:
<tr:inputText id="myValue" value="#{myBean.value1}" autoSubmit="true" immediate="true" partialTriggers="myValue" valueChangeListener="#{myBean.textChangeListener}" styleClass="stylePageTextSmallColored"> </tr:inputText>
您可以使用特立尼达的部分页面渲染。
简而言之:您需要在您的输入中添加一个id
属性,并在您引用输入组件的partialTriggers
属性中添加一个tr:outputText
组件。
在您的情况下,最小的实现将是:
<tr:inputText id="value1Input"
value="#{myBean.value1}"
autoSubmit="true"
immediate="true"/>
<tr:outputText value="value1: #{myBean.value1}"
partialTriggers="value1Input"/>