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参数
下面的例子
<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输入组件是无效的(它已经“隐藏”了)
另见:
<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*
在接收器中
<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 在发送方中
<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*
在接收器中
<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