标签: viewparams

JSF f:viewParam如果位于template.xhtml中则不调用setter

也许有人可以启发我.

如果放

<f:metadata>
  <f:viewParam name="test" value="#{test.value}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

在模板内,设置者

setValue
永远不会被调用,即调用preRender方法'call()'而不事先调用setter(参见下面的代码示例以供参考).

但是,如果将元数据块放在合成中,则会按预期调用它.

这是正常行为还是我做错了什么?
非常感谢任何见解.
Hanspeter

供参考,这里是非工作版本的完整代码示例:

testtemplate.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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">

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

     <f:event type="preRenderView" listener="#{test.call}" />

     <h:head>
        <title>Test Template</title>
     </h:head>

     <h:body>
        <ui:insert name="text" />
     </h:body>

</html>
Run Code Online (Sandbox Code Playgroud)

testcomposition.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                 template="/templates/testtemplate.xhtml" 
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html">

     <ui:define name="text">
        some text
     </ui:define>

</ui:composition>
Run Code Online (Sandbox Code Playgroud)

这里是工作 …

jsf facelets composition viewparams

7
推荐指数
1
解决办法
5858
查看次数

f:具有多个值的viewParam

我有一个<f:viewParam>驱动的搜索屏幕.我正在尝试实现它以获取单个的多个值<f:viewParam>.

我相信正确的URL看起来像

<url>?state=COMPLETE&state=PENDING
Run Code Online (Sandbox Code Playgroud)

XHTML部分如下:

<f:metadata>
   <f:viewParam name="state"
      value="#{backingBean.state}"
      converter="#{stateNameConverter}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

我在backingBean上尝试了以下2个方法签名:

public void setState(State... state)
Run Code Online (Sandbox Code Playgroud)

希望JSF实现为值构建一个数组并在依赖bean上设置.JSF实现失败,错误表明它无法将枚举转换为枚举数组.

public void setState(State state)
Run Code Online (Sandbox Code Playgroud)

认为可能JSF实现会设置转换后的值,因为它在URL中找到它们.仅设置了第一个值.

stateNameConverter之间的转换Stringenum价值.

<f:viewParam>在JSF 2中可以有多个值吗?

jsf viewparams

5
推荐指数
1
解决办法
2436
查看次数

当URL中没有参数时,将f:viewParam属性设置为null

假设我们得到了一个接受一个参数的简单页面:

<f:viewParam name="name" value="#{bean.name}"/>
Run Code Online (Sandbox Code Playgroud)

当用户进入时http://localhost/myapp/?name=Joe,则#{bean.name}设置为Joe.然后,如果用户去http://localhost/myapp/http://localhost/myapp/?something=Else,然后#{bean.name}仍然设置Joe,但我希望它null.怎么做到这一点?

jsf-2 viewparams

5
推荐指数
1
解决办法
1409
查看次数

JSF ViewParam必需+ AJAX中断页面

当我单击下面页面上的命令按钮时,导航失败.(单击该按钮刷新页面,删除URL参数并显示所需的错误消息,而不是导航到索引页面)

但是,如果我删除所需的属性或删除f:ajax标记导航工作正常.

使用com.sun.faces JSF 2.1.13和primefaces 3.4.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head></h:head>

 <f:metadata>
        <f:viewParam name="product"
            required="true" requiredMessage="Bad request. Please use a link from within the system."/>
    </f:metadata>

<body>

    <h:form id="form">
        <h:selectBooleanCheckbox>
            <f:ajax update="form" />
        </h:selectBooleanCheckbox>
        <h:commandButton value="buy" action="/index.xhtml?faces-redirect=true" />
    </h:form>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

ajax jsf jsf-2 viewparams

5
推荐指数
1
解决办法
2002
查看次数

当未使用URL参数时,在POST上重新创建视图范围的bean

我有一个视图范围的 JSF托管bean,支持xhtml视图,我使用f:viewParam从URL读取一个参数.

该视图向用户呈现表单.但是,当用户通过按p:commandButton提交表单时,似乎重新创建了视图范围的bean(我添加了@PostConstruct注释来验证这一点),因此不记得从f:viewParam读取的实例变量(下面的代码).

我最初使用GET导航到视图,其中包含URL参数,但是当用户按下p时发送的POST消息:commandButton不包含URL参数.所以我认为当JSF运行时没有在POST上看到URL参数时,它认为这是一个不同的视图,并且正在重新创建JSF管理的bean.当我将视图范围更改为session-scoped时,代码可以正常工作.

这是代码:

视图

<f:metadata>
    <f:viewParam name="invId" value="#{registerBean.invId}"/>
</f:metadata>
<h:form id="registrationForm">
     ....
    <p:commandButton value="register" action="#{registerBean.register}"
                     icon="ui-icon ui-icon-newwin" ajax="false"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

支持豆

@ManagedBean                                      
@ViewScoped
public class RegisterBean implements Serializable {
    @ManagedProperty(value="#{invId}")
    private String invId;
    ...
Run Code Online (Sandbox Code Playgroud)

更新

事实证明,这与URL参数根本没有关系.在下面的BalusC建议之后,我删除了c:when我的视图使用的标签(依赖于渲染的属性而不是相同的效果),现在不再重新创建视图范围的bean并正确保留invId字段.

jsf viewparams

5
推荐指数
1
解决办法
2554
查看次数

f:当使用新的xmlns.jcp.org命名空间时,viewParam不传递必需的参数

我正在尝试使用Glassfish 4.0和Java EE 7 XML命名空间来测试下面的示例.

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Title</title>
    </h:head>
    <h:body>
        <h:form>
             <ul>
                 <ui:repeat value="#{appLoad.movieList}" var="movie">
                    <li>
                        <h:link value="#{movie.title}" outcome="movie" includeViewParams="true">
                            <f:param name="id" value="#{movie.id}"/>
                        </h:link>
                    </li>
                </ui:repeat>
            </ul>
        </h:form>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

它链接到以下页面movie.xhtml:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <f:metadata>
            <f:viewParam name="id" value="#{appLoad.movieId}"/>
            <f:event listener="#{appLoad.movieDetail()}" type="preRenderView"/>
        </f:metadata>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="2">
                <h:panelGrid columns="1" width="400">
                    <h:panelGrid columns="1">
                        Title : <h:outputLabel value="#{appLoad.movie.title}"/>
                    </h:panelGrid>  
                </h:panelGrid> 
            </h:panelGrid>  
        </h:form>
    </h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

#{appLoad}支持bean是

@ManagedBean
@RequestScoped
public class AppLoad { …
Run Code Online (Sandbox Code Playgroud)

xml-namespaces jsf-2 mojarra viewparams jsf-2.2

4
推荐指数
1
解决办法
2655
查看次数

如果af:viewParam为空,则重定向

如果a f:viewParam为空,我会进行重定向(或错误)吗?

<f:metadata>
    <f:viewParam name="accountId" value="#{accountMB.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

当我添加时required="true",没有任何反应.有什么选择?

error-handling jsf redirect viewparams jsf-2.2

4
推荐指数
1
解决办法
1313
查看次数

f:调用第二个ajax请求时带有Converter和ViewScoped异常的viewParam

我有这个f:viewParam,我尝试绑定验证,并转换userIdPlayer和我得到了一个意想不到的结果.

<f:metadata>
    <f:viewParam name="userId" value="#{myBean.selectedPlayer}" converter="pConverter"
         converterMessage="Bad Request. Unknown User" required="true"
         requiredMessage="Bad Request. Please use a link from within the system" />

</f:metadata>
<h:body>
    <p:messages id="msgs"/>        
    <h:form>
        <ul>
            <li><a href="index2.xhtml?userId=1">Harry</a></li>
            <li><a href="index2.xhtml?userId=2">Tom</a></li>
            <li><a href="index2.xhtml?userId=3">Peter</a></li>
        </ul>            
    </h:form>
    <h:form>
        <h:panelGrid columns="2" rendered="#{not empty myBean.selectedPlayer}">

            <h:outputText value="Id: #{myBean.selectedPlayer.id}"/>

            <h:outputText value="Name: #{myBean.selectedPlayer.name}"/>

        </h:panelGrid>
    </h:form>
    <h:form id="testForm">
        <h:inputText value="#{myBean.text}"/>
        <p:commandButton value="Switch" update=":msgs testForm"/>
        <h:outputText value="#{myBean.text}" rendered="#{not empty myBean.text}"/>
    </h:form>    
</h:body>
Run Code Online (Sandbox Code Playgroud)

我的转换器看起来像这样

@FacesConverter(value="pConverter")
public class PConverter implements Converter …
Run Code Online (Sandbox Code Playgroud)

java validation jsf viewparams omnifaces

3
推荐指数
1
解决办法
2977
查看次数

<h:link includeViewParams ="true">不包含网址参数

我有一个JSF页面,由URL打开test.xhtml?a=15&b=20.

我有一个链接,应该将所有URL参数传递到下一页.

<h:link outcome="index" includeViewParams="true" value="Include all url parameters" />
Run Code Online (Sandbox Code Playgroud)

我期待当我点击链接时它会转到 index.xhtml?a=15&b=20

但我在URL中没有看到任何内容.我明白了includeViewParams吗?

jsf viewparams

3
推荐指数
1
解决办法
3836
查看次数

导航到传递参数的其他视图

我目前的环境是JRE 1.7,JSF 2.2,Eclipse Luna.在entity_index.xhtml我的应用程序的某个页面()中,我有以下(PrimeFaces)按钮:

<p:commandButton value="Details" action="entity_details"
                 ajax="false" onclick="this.form.target='_blank'">
    <f:param name="id" value="#{entity.id}" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

我们的想法是提供一个按钮,以便用户可以单击它,当前实体的一些细节将显示在另一个浏览器选项卡(页面entity_details.xhtml)中.这是许多的一个按钮,因此entity_index.xhtml页面显示实体的许多实例,每个实例都有一个详细信息按钮.

按钮的工作方式是新选项卡打开并显示正确的页面(entity_details.xhtml),但实体ID永远不会到达处理详细信息页面的bean(EntityDetailsMB).详情页面如下:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br"
    template="/private/template/sbadmin.xhtml">
<f:metadata>
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/>
</f:metadata>

<ui:define name="content">
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2>
<h:form id="form">
...
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

请注意,有一个<f:metadata/>元素专门用于捕获从索引页面发送的参数并将其转发到id属性中EntityDetailsMB,其中包含以下内容:

public Entity getEntity() {
    return entityById(id);
}

public Long getId() {
    return id;
}

public void setId(Long value) {
    id = value;
}
Run Code Online (Sandbox Code Playgroud)

因为setId()从不调用该方法,所以 …

navigation primefaces jsf-2 viewparams

2
推荐指数
1
解决办法
2849
查看次数

JSF 2.0视图参数传递对象

我试图将一个对象从一个页面传递到另一个页面,其中每个页面都在不同的视图中.

在第一页上我有一个输入文本,其中myBean是ViewScoped Bean,名称是一个对象. <h:inputText value="#{myBean.name}"/>

第二页包含,
<f:metadata>
<f:viewParam name="userId" value="#{myBean.name}"/>
</f:metadata>

我得到错误转换错误设置值mypackage.myBean@257100b'为'null Converter'.我们可以传递String值以外的对象来查看参数吗?

jsf-2 viewparams

1
推荐指数
1
解决办法
1万
查看次数