jsf关于disable的问题

sitong0413 2007-12-24 03:11:30
由于修改用户页面不许用户修改名称,所以在<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去掉,显示就正常了。可是这样就不符合需求了。
为什么会出现这样的情况?请大侠们指点~~
...全文
725 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sitong0413 2008-01-08
  • 打赏
  • 举报
回复
这种情况不知道大家有没有遇到过。现在已经完全解决了。
在bean里放了一个inputhidden值,之后两个值互相传递参数。
这样就保存了userName的值。
可是在后来,又遇到了一点小麻烦。
前面的问题是在managed-bean中验证所以会遇到属性为空的情况。
现在是用到了JSF中的Validator验证,代码如下:
页面
<h:inputText value="#{userAdd.user.userName}" styleClass="textbox" disabled="true">
<f:converter converterId="stringconverter"/>
</h:inputText>
<h:inputText id="idCard" value="#{userAdd.user.idCard}" maxlength="18" styleClass="textbox" >
<f:validator validatorId="cmtValidator"/>
<f:attribute name="idCardVerify" value="true"/>
</h:inputText>
<h:message for="idCard" style="color: red; "/>

validate验证
private boolean idCardVerify;
/**
get set 方法
*/
private static final String IDCARD_REGEX="^\\d{15}|\\d{17}[\\d|X]$";//身份证号
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException {

Pattern pattern = null;
initProps(component);
if (idCardVerify) {
pattern = Pattern.compile(IDCARD_REGEX);
errorMessage ="身份证号无效!身份证应为15或18位有效数字(包含尾字母)!";
}
}
private void initProps(UIComponent component) {
Boolean IdCardV = Boolean.valueOf((String) component.getAttributes().get("idCardVerify"));
idCardVerify = IdCardV == null ? idCardVerify : IdCardV.booleanValue();
}
如果验证失败的话,
直接返回页面给出相关错误提示,而且userName属性又被置空了。
只有了解了JSF的生命周期,
才会意识到JSF是先要validate之后才会到后台进行操作。
validate失败后不会到managed-bean中操作,更不要说对bean进行get和set操作了。
最后额在bean里把userName进行了binging
代码如下:
private UIInput txtComponentInput = new UIInput();
public UIInput getTxtComponentInput() {
return txtComponentInput;
}
public void setTxtComponentInput(UIInput txtComponentInput) {
this.txtComponentInput = txtComponentInput;
}
之后在get属性动了一点手脚
public String getUserName() {
if(null != userName){
this.txtComponentInput.setValue(userName);
this.txtComponentInput.setRendered(true);
}
return userName;
}
这样userName就再也不会被置空了。
chenwei175528 2007-12-29
  • 打赏
  • 举报
回复
readonly和inputhidden可以实现
还有另外一种方法是用JS来赋值代替inputhidden
8追8梦8 2007-12-29
  • 打赏
  • 举报
回复
不能用disable,用readonly,然后再放一个隐藏的inputhidden绑定到用户名,这个问题我搞了一晚上,如果用disable了,就是放一个隐藏的输入框也没有用,他也会清除掉里面的内容,所以解决办法就是readonly外带一个inputhidden的。
sitong0413 2007-12-24
  • 打赏
  • 举报
回复
那JSF<h:inputText>标签什么属性才能实现<input type=text disable="true">的效果呀?
我试着用<h:outputText>也一样的,选择下拉选后用户名又显示空了?
hornbilltofy 2007-12-24
  • 打赏
  • 举报
回复
jsf针对disabled的处理是如果为true,则在submit时,就不接收对应输入框的数据,否则为接收,所以不能按你上述方法来做.
胡矣 2007-12-24
  • 打赏
  • 举报
回复
mark

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧