加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 使用f:viewParam和必需的属性和命令

发布时间:2020-12-15 23:13:24 所属栏目:百科 来源:网络整理
导读:我想分享我使用primefaces,f:viewParam和p:commandButton的经验,并提出几个问题.看一下这个页面: ?xml version="1.0" encoding="UTF-8"?!DOCTYPE htmlhtml xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http:/
我想分享我使用primefaces,f:viewParam和p:commandButton的经验,并提出几个问题.看一下这个页面:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
  <h:head></h:head>
  <h:body>  
    <f:metadata>
      <f:viewParam required="true" name="id_file" value="#{bean.idFile}" />
    </f:metadata>
    <h:form id="tableform" prependId="false">              
      <p:commandButton actionListener="#{bean.myMethod())}" icon="ui-icon-search" title="View" />
    </h:form>
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />      
  </h:body>
</html>

支持bean有一个“myMethod()”方法,什么都不做.当您进入页面时,它需要“id_file”参数并将其放在辅助bean的idFile属性中.然后单击按钮,调用myMethod.然后再次单击,您会得到一个模糊的验证错误,并且永远不会调用myMethod:

j_idt1: Validation Error: Value is required.j_idt1: Validation Error: Value is required.

首先,请记住,如果没有p:消息,您无法看到此消息,您必须挖掘primefaces在ajax调用上发送的XML.其次,经过4个小时的调试后,我试图改变f:viewParam,如下所示:

<f:viewParam name="id_file" value="#{bean.idFile}" />

没有“必需”:神奇地一切都开始工作,我可以点击1,2,3等,每次调用myMethod.所以,问题是ajax submit验证了用f:viewParam指定的参数,对我来说听起来很傻,但好吧,我可以忍受它.

我的问题是:

>为什么第一次点击按钮时出现此验证错误?如果你看一下ajax POST,它们是完全相同的
>在部分ajax调用中验证视图参数(在我的想法中,属于视图)应该可以吗?
>有没有办法告诉primefaces不要对特定的ajax请求进行验证(process =“@ this”无法解决)?

谢谢,我希望我的经验能让您避免花费数小时进行调试!

解决方法

> viewParam是一个UIComponent.这意味着它在语义上与< h:commandButton />没有什么不同.或者< h:inputText />并且它可以通过每个规定的JSF请求处理生命周期阶段,直到并包括验证和转换.事实上,标签本身会导致任何给定的视图进入任何给定页面的完整处理,只需在那里
>< p:commandButton />将要做一个回发,意思是,它将使用POST重新请求相同的视图.因此,要解决当前的问题,您需要根据以下事实确定所需的条件:
<f:viewParam  required="#{!facesContext.postback}" name="id_file" value="{bean.idFile}"/>

您从新条件中获得的是仅在第一个请求时才需要该参数.后续回发不会触发条件.请确保您没有任何逻辑(可能在@PostConstruct中构建了该期望值

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读