gpt4 book ai didi

jsf-2 - PrimeFaces inputText 启用/禁用

转载 作者:行者123 更新时间:2023-12-01 16:21:57 26 4
gpt4 key购买 nike

我在 JSF2/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,但它们似乎是这样正确的(尝试对 ajax 使用 ID 符号“tabView:date”时无效。)

问题是,当进入页面时,“实际”文本字段默认情况下是禁用的,当单选按钮设置为启用它时应该启用它。当单选按钮状态更新时,我可以看到事件已在服务器端注册,并且 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;
}
}

最佳答案

不幸的是,我无法找出导致实际问题的原因。基本的事情似乎是继承的javascript(primefaces)在此页面上无法正常工作(可能是因为继承了其他一些js)。最后,我将其设为自定义启用/禁用 js 函数:

js.toggleDisableStatus = function(elementId) {

// Can't use jQuery $("#xx:yy"), the syntax is not accepted by jquery but
// used by JSF/PrimeFaces
var element = document.getElementById(elementId);
var attrValue = element.getAttribute('disabled');
if (attrValue === undefined || attrValue == null) {
element.disabled = true;
element.style.background = "#dddddd";
} else {
element.removeAttribute('disabled');
element.style.background = "";
}
};

这可能有缺陷,但目前有效。单选按钮由持久状态(加载状态)选择,输入字段的启用/禁用状态也在初始加载页面时设置。一般来说,我认为这应该适用于这种特殊情况。

关于jsf-2 - PrimeFaces inputText 启用/禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com