用例:我在编辑表单中有一个非常重要的值,不应该经常更改。我决定让它只读,并在侧面有“更改”按钮。单击此按钮后,会向用户显示带有警告的对话框,并启用此只读字段以进行更改。(它是一个 selectOneMenu)
第一次尝试:
<p:selectOneMenu
id="integrationCombo"
value="#{backendBean.integration.backend}"
widgetVar="backendIntegrationCombo"
disabled="true">
<f:selectItems
value="#{backendBean.backends}"
var="backend" itemValue="#{backend}"
itemLabel="#{backend.name}" />
</p:selectOneMenu>
<p:commandButton type="button"
styleClass="inlineTableCellButton"
onclick="backendIntegrationCombo.enable()"
value="#{msg['button.change']}" />
这会启用组合框,但他的值不会发送到服务器(这是由于我发现的 disabled=true)
我的第二次尝试是在视图范围的 bean 和 disable="#{!bean.editable}" 上设置可编辑的布尔值,并使用命令按钮调用 setEditable(true)。这很好用,但由于未知原因,现在提交表单的命令按钮上的保存操作停止工作。
第三次尝试:使用名称和组合框(带有隐藏类)渲染 h:outputText,并在单击更改按钮后切换其隐藏类。
function changeBackend() {
$("#backendName").addClass("hidden");
$("#integrationCombo_input").parent().parent().removeClass("hidden");
}
除了一件事之外,它也可以正常工作:保存完成后 - 没有渲染任何内容(既不是 ouputText 也不是组合框)