我在JSF2/PrimeFaces页面上有两个单选按钮,我需要根据选择启用/禁用inputText字段。PrimeFaces inputText启用/禁用
<h:form prependId="false">
<p:panelGrid id="notif">
<p:row id="notif1">
<p:column>
<h:outputText value="label" />
</p:column>
<p:column>
<p:selectOneRadio id="radiobuttons" value="#{state.radioStatus}" layout="pageDirection">
<f:selectItem itemLabel="enable" itemValue="enable" />
<f:selectItem itemLabel="disable" itemValue="disable" />
<p:ajax update="date" />
</p:selectOneRadio>
</p:column>
<p:column>
<p:inputText id="date" value="#{state.infoDate}" disabled="#{!state.checkStatus}" >
</p:inputText>
<p:inputText id="test" value="#{state.infoDateTest}">
</p:inputText>
</p:column>
</p:row>
</p:panelGrid>
</h:form>
此外,这一切都在一个选项卡内,但检查生成的HTML时没有嵌套窗体。这些字段似乎得到了选项卡的ID,但它们似乎是这样正确的(当尝试使用ID标记'tabView:date'作为ajax时没有工作。)
问题是,当进入页面中,“实际”文本字段默认处于禁用状态,应在单选按钮设置为启用时启用。当单选按钮状态更新时,我可以看到事件已在服务器端注册,并且inputText字段被“可视化”启用(默认情况下,它被禁用)。但是,在启用该字段后,该字段不是“可调焦的”,因此无法写入。
当我添加'test'inputText字段时,它会得到更奇怪的结果,它没有使用关于单选按钮的自启用/禁用。在全新的页面加载中,您可以写入它,但在更改单选按钮状态后,它不再可写(在ajax调用之前输入的文本将保留,但不可编辑)。
然而,单选按钮继续工作,并将触发服务器端的事件。
有人能指出我可能做错了什么,或者这可能是PrimeFaces的一个错误?
//更新 就像所说的那样,托管bean的工作方式应该是这样的,所以我没有看到任何问题,但这里是代码(为了可读性而简化并重命名,因为相关部分取自更大的上下文)。
@ManagedBean(name = "state")
@SessionScoped
public class ExampleBean implements Serializable {
private static final String disable = "disable";
private static final String enable = "enable";
private String text;
private List<TestRow> rows = null;
private TestRow row = null;
private String radioStatus = "enable";
private String infoDate = "";
private String infoDateTest = "";
@PostConstruct
public void initEmpty() {
}
public String getRadioStatus() {
return this.radioStatus;
}
public void setRadioStatus(String radioStatus) {
this.radioStatus = radioStatus;
}
public String getInfoDate() {
return infoDate;
}
public void setInfoDate(String infoDate) {
this.infoDate = infoDate;
}
public String getInfoDateTest() {
return infoDateTest;
}
public void setInfoDateTest(String infoDateTest) {
this.infoDateTest = infoDateTest;
}
public boolean isCheckStatus() {
return this.radioStatus.equalsIgnoreCase(enable) ? true : false;
}
}
你正在处理哪个PF版本?你也可以发布你的托管bean代码吗? –
对不起,忘记了信息。 PrimeFaces 3.5(扩展0.6.3)。 –
应该猜到了。我在我的一个测试项目上尝试了上面的代码,没有在“实际”页面上添加额外的东西,现在我已经有了这个工作。下一步似乎将其添加到选项卡中,并解析实际页面上的其他组件/功能。 –