当前位置: 首页 > 知识库问答 >
问题:

如何验证通过多个选项卡共享的实体

丌官飞章
2023-03-14

我有一个h:form,它围绕着p:tabView。在选项卡中,每个输入元素都有一个p:message。

<p:column>
    <p:outputLabel value="Name" for="name_input" />
</p:column>
<p:column>
    <p:message for="name_input" display="icon" />
</p:column>
<p:column>
    <p:inputText id="name_input" value="#{bean.person.name}">
        <p:ajax /> <!-- put value into backingbean on tabchange -->
        <f:validateRequired />
    </p:inputText>
</p:column>

我发表了以下意见。

1) 问题:验证仅在已激活的选项卡中执行

>

  • 如果我切换到编辑模式并且当前选项卡没有验证错误并且我没有更改选项卡,那么我的实体将被保存并且其他选项卡上的验证错误将被忽略。

    如果我切换到编辑模式并导航到有验证错误的选项卡,然后导航到没有验证错误的第一个选项卡,则会显示验证错误(但仅限于我访问的那些选项卡)。

    (我希望这是可以理解的,至少有一点)如果我在p:tabView中设置dynamic=true/false和cache=false,这没有什么区别。

    2)问题:标签更改上没有消息图标

    • 如果我切换到编辑模式并单击每个选项卡,以便识别每个验证错误(如场景b),我会得到一条正确的验证消息(图标),并且p: inputText以红色边框显示。所以一切似乎都很好。但是如果我导航到另一个有验证错误的选项卡,则不会显示消息图标,只有红色边框在特定的p: inputText周围。据我猜测,JSF生命周期在制表符更改时执行,但没有进行验证,因此对于这个生命周期往返,一切正常,消息图标消失(另一方面,为什么红色边框没有消失对我来说是个谜...)。

    3) 问题:选项卡中没有视觉提示

    • 对于用户体验,我非常希望有一个视觉提示(即标签标题上的红色背景),以便用户知道问题发生在哪里。

    我读过用多个选项卡验证一个表单,如何在不丢失验证错误的情况下切换选项卡?使用我的面孔和特立尼达,但无论是向导(这不是一个“魔法”任务,它只是一个大实体的编辑)还是用javascrip-and-css自己动手(主要问题是我在其他情况下经常使用tabViews的公司身份)对我来说都不是一个好选择。

    有人对我的任何问题有解决方案/提示吗?

    我使用的是JSF 2.2,Primefaces 5.3。

  • 共有1个答案

    钱毅
    2023-03-14

    好的,我的一位同事想出了答案。

    首先,我的前两个问题消失得无影无踪。在

    以及选项卡中的视觉提示。有一个<代码>

    <p:tabView dynamic="false" cache="false">
        <f:facet name="title">
            Address
            <p:message for="name_input" display="icon" />
        </f:facet>
        ...
        <p:panelGrid>
            <p:row>
                <p:column>
                    <p:outputLabel value="Name" for="name_input" />
                </p:column>
                <p:column>
                    <p:message for="name_input" display="icon" />
                </p:column>
                <p:column>
                    <p:inputText id="name_input" value="#{bean.person.name}">
                        <p:ajax />
                        <f:validateRequired />
                    </p:inputText>
                </p:column>
            </p:row>
            ....
        </p:panelGrid>
    </p:tabView>
    

     类似资料:
    • 问题内容: 这是我的代码,但这是针对单个文件的解决方案。 我可以像下面的单个文件一样共享多个文件和上载吗? 问题答案: 是的,但是您需要使用而不是。 这绝对可以简化,但我在其中保留了一些内容,以便您可以分解所需的每个步骤。 更新 :从API 24开始,共享文件URI将导致FileUriExposedException。为了解决这个问题,您可以将compileSdkVersion切换为23或更低版本

    • 问题内容: 我有一个常规的Twitter Bootstrap 3标签。我要做的就是控制 一个元素来控制多个容器。 在此示例中,当我更改标签时,仅第一个被更改。我要两个容器都改变,而不仅仅是第一个。 谢谢! 问题答案: 我将 data-target 属性添加到a元素并更改第二个tab内容中的id 我修改了这行 您的: 我的更新: 第二个选项卡内容,您的: 我的更新:

    • 目前我有一个应用程序跟踪用户的位置,并通过使用折线和地图标记绘制路线,我需要将包含LatLng坐标的arraylist添加到另一个存储所有路线的数组列表中,即LatLng arraylist是一条路线,所以我需要将所有路线存储在一个arraylist中,并将其存储在共享首选项中,这样我就可以将用户走过的所有路线加载到地图中。到目前为止,我只存储了一条到共享首选项的路由,并在每次添加新路由时覆盖它。

    • 标题中的问题。这里提出了一个类似的问题,当时唯一的解决办法是将项目发布到本地Maven存储库中。 这个问题在Android Studio 0.5中修复了吗(正如一些人所声称的)?在其发行说明中有一条声明说“支持模块内容根目录之外的源文件夹”。这是否意味着我们最终可以从项目文件夹外部导入库? 我试过文件- 编辑2:查看最新解决方案的接受答案(截至0.8。) 编辑: 我的项目目录结构只有一个模块,如下

    • 问题内容: 我的机器在端口8080上运行着jboss,我想在网络上共享jboss服务器,以便我使用jbossws- native-4.0.2运行jboss服务,但是我仍然无法访问网络上的jboss服务器,请帮助。 问题答案: 启动jboss(run.sh或run.bat)时使用选项-b 0.0.0.0,这会将端口绑定到所有网络接口。默认值为localhost,这就是为什么您无法通过网络访问服务器的

    • 电子邮件通过验证后,如何在“身份验证”选项卡中添加用户?