我使用Icefaces 1.8.2和ice:inputTextarea
控件,我无法弄清楚为什么没有在这里设置值:
的.jsp
<ice:inputTextarea binding="#{easp$RecordSearch.repairRemark}" id="repairRemark"
partialSubmit="true" style="height:40px; width:100%;" />
的.java
//bean
private HtmlInputTextarea repairRemark = new HtmlInputTextarea();
public HtmlInputTextarea getRepairRemark() {
return repairRemark;
}
public void setRepairRemark(HtmlInputTextarea hit) {
this.repairRemark = hit;
}
....
public String button3_action() {
...
//code that sets value
String myVal = "new value";
this.repairRemark.setValue(myVal);
...
return null;
}
设置值的代码是我知道被触发的按钮点击事件的一部分,因为我设置了其他几个Icefaces控件,除了这个之外所有其他setter都正常工作。我只是注意到它实际上似乎非常短暂地设置文本,但立即消失。我检查了该页面上的所有代码,我几乎可以肯定没有其他的setter覆盖它。有谁知道这里发生了什么?
更新
它似乎不是一个阶段&#34;相关问题,因为此事件正在INVOKE_APPLICATION
阶段处理。另外需要注意的是,我遇到了与jsf相同的问题h:inputTextarea
答案 0 :(得分:1)
我找到了原因和解决方案。原因是触发此点击事件的ice:commandButton
位于ice:dataTable
的列中。 ice:dataTable
有一个ice:rowSelector
,似乎在点击按钮时会导致额外的服务器请求。当我删除ice:rowSelector
时,问题就消失了。
解决方案是将toggleOnClick="false"
或toggleOnInput="false"
添加到ice:rowSelector
。我添加了两个,以防万一。
http://res.icesoft.org/docs/v1_8_2/tld/ice/rowSelector.html
希望这有助于遇到此问题的其他任何人。