日期:2014-05-18  浏览次数:20738 次

jsf关于disable的问题
由于修改用户页面不许用户修改名称,所以在<h:inputText>属性上设定了disabled属性,而且该页面上还有联动下拉选的别的backing-bean
代码如下
用户名:<h:inputText id="userName" value="#{userAdd.user.userName}" styleClass="textbox" disabled="true"/>

<h:outputLabel value="行业类别:"/>
  <h:inputHidden id="adClassId" value="#{userAdd.user.adClassId}"/>
  <h:selectOneMenu id="ClassA" onchange="this.form.submit();" value="#{userAdd.user.selectA}"
  valueChangeListener="#{callingList.changeA}">
  <f:selectItems value="#{callingList.selectlistA}"/>
  </h:selectOneMenu>
  <h:selectOneMenu id="ClassB" onchange="this.form.submit();" value="#{userAdd.user.selectB}" 
  valueChangeListener="#{callingList.changeB}" >
  <f:selectItem itemValue="b" itemLabel="---请选择---"/>
  <f:selectItems value="#{callingList.selectlistB}"/>
  </h:selectOneMenu>
在该页面上操作下拉选后,用户名称框的显示就被清空了?
而且尝试着把disabled去掉,显示就正常了。可是这样就不符合需求了。
为什么会出现这样的情况?请大侠们指点~~

------解决方案--------------------
jsf针对disabled的处理是如果为true,则在submit时,就不接收对应输入框的数据,否则为接收,所以不能按你上述方法来做.
------解决方案--------------------
不能用disable,用readonly,然后再放一个隐藏的inputhidden绑定到用户名,这个问题我搞了一晚上,如果用disable了,就是放一个隐藏的输入框也没有用,他也会清除掉里面的内容,所以解决办法就是readonly外带一个inputhidden的。
------解决方案--------------------
readonly和inputhidden可以实现
还有另外一种方法是用JS来赋值代替inputhidden