Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 什么可以<;f:元数据>&书信电报;f:viewParam>;及<;f:viewAction>;用来做什么?_Jsf_Jsf 2_Viewparams_Viewaction - Fatal编程技术网

Jsf 什么可以<;f:元数据>&书信电报;f:viewParam>;及<;f:viewAction>;用来做什么?

Jsf 什么可以<;f:元数据>&书信电报;f:viewParam>;及<;f:viewAction>;用来做什么?,jsf,jsf-2,viewparams,viewaction,Jsf,Jsf 2,Viewparams,Viewaction,有人能解释一下我们如何使用这个片段吗 <f:metadata> <f:viewParam id="id" value="#{bean.id}" /> <f:viewAction action="#{bean.init}" /> </f:metadata> 过程获取参数 管理GET参数的设置、转换和验证。这类似于,但是对于GET参数 下面的例子 <f:metadata> <f:viewParam name

有人能解释一下我们如何使用这个片段吗

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>

过程获取参数 管理GET参数的设置、转换和验证。这类似于
,但是对于GET参数

下面的例子

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

对GET参数执行业务操作 您可以使用

<f:metadata>
    <f:viewParam id="id" name="id" value="#{bean.id}" required="true">
        <f:validateLongRange minimum="10" maximum="20" />
    </f:viewParam>
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />
然而,自JSF2.2以来,
是新的(自JSF2.0以来,
已经存在)。如果您无法升级,那么您的最佳选择是使用

如果您也想跳过“转换/验证失败”案例,请执行以下操作:

public void onload() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
        // ...
    }
}
以这种方式使用
本质上是一种变通/破解方法,这正是在JSF2.2中引入
的原因


将视图参数传递到下一个视图 通过将
includeViewParams
属性设置为
true
或添加
includeViewParams=true
请求参数,可以“传递”导航链接中的视图参数

<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">
基本上,这个
@RequestScoped
bean:

private String query;
private List<Result> results;

public void search() {
    results = service.search(query);
}
私有字符串查询;
私人名单结果;
公开无效搜索(){
结果=service.search(查询);
}
请注意,
用于
,而不是普通的HTML
!还请注意,当
{bean.query}
为空时,输入值将显示
{param.query}
,因为如果出现验证或转换错误,提交的值将根本不显示。请注意,这个构造对于JSF输入组件是无效的(它已经“隐藏”了)


另见:
过程获取参数 管理GET参数的设置、转换和验证。这类似于
,但是对于GET参数

下面的例子

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

对GET参数执行业务操作 您可以使用

<f:metadata>
    <f:viewParam id="id" name="id" value="#{bean.id}" required="true">
        <f:validateLongRange minimum="10" maximum="20" />
    </f:viewParam>
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
<h:message for="id" />
然而,自JSF2.2以来,
是新的(自JSF2.0以来,
已经存在)。如果您无法升级,那么您的最佳选择是使用

如果您也想跳过“转换/验证失败”案例,请执行以下操作:

public void onload() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
        // ...
    }
}
以这种方式使用
本质上是一种变通/破解方法,这正是在JSF2.2中引入
的原因


将视图参数传递到下一个视图 通过将
includeViewParams
属性设置为
true
或添加
includeViewParams=true
请求参数,可以“传递”导航链接中的视图参数

<h:link outcome="next" includeViewParams="true">
<!-- Or -->
<h:link outcome="next?includeViewParams=true">
基本上,这个
@RequestScoped
bean:

private String query;
private List<Result> results;

public void search() {
    results = service.search(query);
}
私有字符串查询;
私人名单结果;
公开无效搜索(){
结果=service.search(查询);
}
请注意,
用于
,而不是普通的HTML
!还请注意,当
{bean.query}
为空时,输入值将显示
{param.query}
,因为如果出现验证或转换错误,提交的值将根本不显示。请注意,这个构造对于JSF输入组件是无效的(它已经“隐藏”了)


另见:

将参数从视图发送到其他视图,从发送者视图发送到接收者视图,使用viewParam和includeViewParams=true

在发送方中

  • 声明要发送的参数。我们可以发送字符串、对象
  • Sender.xhtml

    <f:metadata>
          <f:viewParam name="ID" value="#{senderMB._strID}" />
    </f:metadata>
    
    <p:dataTable rowIndexVar="index" id="dataTale"value="#{senderMB._arrData}" var="dto">
          <p:commandButton action="#{senderMB.clickBtnDetail(dto)}" value="見る" 
          ajax="false"/>
    </p:dataTable>
    
    在senderMB.clickBtnDetail(dto)中,我们使用从按钮事件(dto)中获得的参数分配_strID,这里是Sender_dto并分配给senderMB

    Sender_MB.java
        public String clickBtnDetail(sender_DTO sender_dto) {
            this._strID = sender_dto.getStrID();
            return "Receiver?faces-redirect=true&includeViewParams=true";
        }
    
    单击时链接将变为
    http://localhost:8080/my_project/view/Receiver.xhtml?*ID=12345*

    在接收器中

  • 获取viewParam Receiver.xhtml 在Receiver中,我们声明f:viewParam以从get请求(receive)中获取param,Receiver的param名称必须与sender相同(第页)
  • Receiver.xhtml

    <f:metadata><f:viewParam name="ID" value="#{receiver_MB._strID}"/></f:metadata>
    
    <f:event listener="#{receiver_MB.preRenderView}" type="preRenderView" />
    
    <f:metadata>
    <f:viewParam name="ID" value="#{receiver_MB._strID}" />
    <f:event listener="#{receiver_MB.preRenderView}"
                type="preRenderView" />
    </f:metadata>
    

    将参数从视图发送到其他视图,从发送方视图发送到接收方视图,使用viewParam和includeViewParams=true

    在发送方中

  • 声明要发送的参数。我们可以发送字符串、对象
  • Sender.xhtml

    <f:metadata>
          <f:viewParam name="ID" value="#{senderMB._strID}" />
    </f:metadata>
    
    <p:dataTable rowIndexVar="index" id="dataTale"value="#{senderMB._arrData}" var="dto">
          <p:commandButton action="#{senderMB.clickBtnDetail(dto)}" value="見る" 
          ajax="false"/>
    </p:dataTable>
    
    在senderMB.clickBtnDetail(dto)中,我们使用从按钮事件(dto)中获得的参数分配_strID,这里是Sender_dto并分配给senderMB

    Sender_MB.java
        public String clickBtnDetail(sender_DTO sender_dto) {
            this._strID = sender_dto.getStrID();
            return "Receiver?faces-redirect=true&includeViewParams=true";
        }
    
    单击时链接将变为
    http://localhost:8080/my_project/view/Receiver.xhtml?*ID=12345*

    在接收器中

  • 获取viewParam Receiver.xhtml 在Receiver中,我们声明f:viewParam以从get请求(receive)中获取param,Receiver的param名称必须与sender相同(第页)
  • Receiver.xhtml

    <f:metadata><f:viewParam name="ID" value="#{receiver_MB._strID}"/></f:metadata>
    
    <f:event listener="#{receiver_MB.preRenderView}" type="preRenderView" />
    
    <f:metadata>
    <f:viewParam name="ID" value="#{receiver_MB._strID}" />
    <f:event listener="#{receiver_MB.preRenderView}"
                type="preRenderView" />
    </f:metadata>
    

    @BalusC当与faces redirect=true结合使用时,“bean”的范围应该是什么?如果将作用域设置为“@RequestScoped”,它是否会像预期的那样工作?@Geek:重定向会创建一个新的GET请求。源bean和目标bean的bean范围是无关的。但是,对于请求和视图作用域bean,您应该考虑新GET请求可能带来的影响。另请参见@BalusC您所说的“无论如何,对于请求和视图作用域bean,您应该考虑新GET请求的可能影响。”@Geek:它们将被丢弃并重新创建,因为它们的作用域随后将结束并开始。@BalusC。一个全面的答案。“当您需要为视图范围的bean使用类似“@”PostConstruct的功能时,如果不是在每个请求上都调用该功能,请检查该请求是否不是回发”。如果不是在每个请求上都调用它,那么为什么要检查该请求是否为回发?@BalusC当与faces redirect=true结合使用时,“bean”的作用域应该是什么?如果将作用域设置为“@RequestScoped”,它会像预期的那样工作吗?@Geek:A