当前位置: 首页 > 面试题库 >

将f:viewParam与必需的属性和命令一起使用

司空俊雄
2023-03-14
问题内容

我想分享我使用素数,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:messages,您将看不到此消息,则必须挖掘素语在ajax调用中发送的XML。其次,经过4个小时的调试,我试图像这样更改f:viewParam:

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

无需“必填”:神奇的是,一切开始工作,我可以单击1,2,3等,并且每次都调用myMethod。因此,问题在于ajax提交验证了用f:viewParam指定的参数,这对我来说听起来很愚蠢,但是好的,我可以接受它。

我的问题是:

  • 为什么在第一次单击按钮时没有出现此验证错误?如果您查看Ajax POST,它们是相同的

  • 在部分ajax调用中验证视图参数(按照我的想法,属于视图)应该可以吗?

  • 有没有办法告诉Primeface不在特定的Ajax请求上进行验证(process =“ @ this”无法解析)?

谢谢,我希望我的经验能使您避免花费大量时间进行调试!


问题答案:
  1. viewParamUIComponent。这意味着它在语义上与a <h:commandButton/>或a 没有区别,<h:inputText/>并且有责任遍历每个指定的JSF请求处理生命周期阶段,直至并包括验证和转换。实际上,标签本身会使任何给定的视图进入任何给定页面的完整处理,

  2. <p:commandButton/>会做一个 回发 ,这意味着,这将是重新请求相同的观点,使用POST。因此,要解决您当前的问题,您需要根据这一事实确定所需的条件:

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

从新条件中得到的是,仅在首次请求时才需要该参数。随后的回发将不会触发该条件。只需确定您没有任何逻辑即可(也许是基于@PostConstruct这种期望而建立的



 类似资料:
  • 我使用的是一个存储字符串的ThreadLocal对象。我将String值设置为过滤器中的ThreadLocal对象,该对象将截取符合特定条件的所有请求。另外,我将ThreadLocal的字符串值设置为HttpSession作为属性。 那么,有什么方法可以改变实现,使多个会话不使用同一个线程呢? 编辑:添加示例代码

  • 如果我把它们放在XSD中,像这样 Xerces报告了以下问题

  • 实际上,我们使用Google IdP作为应用程序的SSO/SAML身份验证类型。我们已将其配置为将用户连接到应用程序,并且运行良好。但最近,我们还想要求用户对应用程序生命周期中可能发生的不同操作进行重新验证。 更详细地说,当我们向Google Idp发送SAML请求时,我们在节点“AuthnRequest”中添加了属性ForceAuthn=“true”,我们还添加了AuthnContextClas

  • 属性文件如何与Apache Camel一起使用,以引用可配置的属性。例如,如果有从文件夹读取文件的路由,那么如何在属性文件中配置该文件夹位置。我正在使用JavaDSL。

  • 问题内容: 在我的Web应用程序中,我对表单字段使用了一些自定义验证。在同一个表单中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单。 通常,我使用Safari作为默认浏览器。现在Safari5退出了,突然我的“取消/重置”按钮不再起作用了。每次按下重置按钮时,表单中的第一个字段都会获得焦点。但是,这与我的自定义表单验证相同。在其他浏览器上尝试时,一切都很好。我必须是Safari 5

  • 我试图在Material UI的TextField上使用React的“ref”属性访问输入数据。通过“inputRef”或“inputProps”似乎没有一种简单的方法可以做到这一点。 下面的示例显示了第26行的inputProps的使用。将TextField的名称指定给“ref”属性似乎不会生成有效的对象。 对于“inputRef”,根据Material ui文档,它强制使用函数,尝试将字段数据