如何使用复选框隐藏部分字段?

发布于 2025-01-02 17:54:12 字数 40 浏览 1 评论 0原文

如何在 Visualforce 页面中使用复选框隐藏字段的一部分?

How to hide a section of fields using a checkbox in visualforce pages?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愁杀 2025-01-09 17:54:12

假设 Salesforce 方法(保持页面重量较低等),您可以执行如下操作:

<apex:inputCheckbox value="{!theBool}">
    <apex:actionSupport event="onChange" action="{!myAction}" rerender="theFieldsPanel"/>
</apex>

<apex:outputPanel id="theFieldsPanel">
    <apex:variable var="v" value="" rendered="{!theBool}">
        <apex:inputField value="{!someField"} rendered/>
        <!-- more fields etc. -->
    </apex:variable>
</apex:outputPanel>

请注意,我不在输出面板本身上使用 rendered 属性,这是因为如果它是未呈现,则它不存在于页面中,因此,不能成为良好的重新呈现目标!现在您只需要在控制器上执行一个简单的操作(如果需要,您可以在此处执行任何其他逻辑):

public Pagereference myAction()
{
    // any logic etc. goes here
    return null;
}

与使用 javascript 相比,以这种方式执行操作的好处是,您可以确保如果字段被隐藏,则值不会将它们发送回控制器以获取它们所绑定的变量。简单地使用 javascript 隐藏内容不会产生相同的效果,因此假设用户在其中一个字段中输入了一些内容,然后隐藏它们,无论他/她输入什么,最终仍然会出现在相关的控制器变量中。

Assuming the Salesforce approach (keeping the page weight down etc.), you could do something like the following:

<apex:inputCheckbox value="{!theBool}">
    <apex:actionSupport event="onChange" action="{!myAction}" rerender="theFieldsPanel"/>
</apex>

<apex:outputPanel id="theFieldsPanel">
    <apex:variable var="v" value="" rendered="{!theBool}">
        <apex:inputField value="{!someField"} rendered/>
        <!-- more fields etc. -->
    </apex:variable>
</apex:outputPanel>

Note that I don't use the rendered attribute on the output panel itself, this is because if it's not rendered then it doesn't exist in the page, and as such, doesn't make for a good rerender target! Now you just require a simple action on the controller (you could do any other logic in here if need be):

public Pagereference myAction()
{
    // any logic etc. goes here
    return null;
}

The benefit of doing things this way, as opposed to with javascript is that you can ensure that if the fields are hidden then values won't be sent back to the controller for the variables they're bound to. Simply hiding things with javascript would not have the same effect, so say the user typed something in one of the fields and then hid them, whatever he/she typed would still end up in the related controller variables.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文