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:param值设置f:setPropertyActionListener值_Jsf_Jsf 2_Param_Setpropertyactionlistener - Fatal编程技术网

Jsf 使用f:param值设置f:setPropertyActionListener值

Jsf 使用f:param值设置f:setPropertyActionListener值,jsf,jsf-2,param,setpropertyactionlistener,Jsf,Jsf 2,Param,Setpropertyactionlistener,我试图使用setPropertyActionListener标记在我的支持bean中设置一个值。然而,它并没有像我预期的那样工作 上下文:userService是我的支持bean的一个实例,它包含一个int成员reqID。这又是属于一个名为User的类的对象映射的关键。我试图创建一个页面,列出用户的所有实例,并提供一个按钮来访问显示该特定用户信息的单独视图。为此,我尝试将userService.reqID设置为所选用户的id,以便它可以为下一个视图生成对该用户的引用(这在调用userServic

我试图使用
setPropertyActionListener
标记在我的支持bean中设置一个值。然而,它并没有像我预期的那样工作

上下文:userService是我的支持bean的一个实例,它包含一个int成员reqID。这又是属于一个名为User的类的对象映射的关键。我试图创建一个页面,列出用户的所有实例,并提供一个按钮来访问显示该特定用户信息的单独视图。为此,我尝试将
userService.reqID
设置为所选用户的id,以便它可以为下一个视图生成对该用户的引用(这在调用
userService.toUserInfo
中完成)

如果我使用下面的xhtml代码段:

<ui:define name="content">
        <h:form>
            <h:panelGrid>
                    <ui:repeat value="#{userService.UserList.getUserList()}" var="user">
                        <li>
                            <h:outputText value="#{user.name}" />
                            <h:commandButton value="View details of #{user.name}" action="#{userService.toUserInfo}">
                            <f:param name="id" value="#{user.id}" />
                            <f:setPropertyActionListener target="#{userService.reqID}" value="#{id}"/>
                            </h:commandButton>

                        </li>
                    </ui:repeat> 
            </h:panelGrid>
        </h:form>
    </ui:define>
这给了我一个错误,因为标记发送的是字符串
“id”
,而不是参数的int值

有没有办法强制f:setPropertyActionListener计算
值下的表达式?还是有其他标签允许我这样做

另外,ui:param在这里使用得合适吗?

这个
(和
)不是这样工作的。
旨在将HTTP请求参数添加到
组件的结果中,并对
中的消息格式进行参数化。
旨在将Facelet上下文参数传递给
。Mojarra有一个bug,它的行为类似于没有作用域的
。这不是预期的用法

如果绝对需要“别名”一个(长)EL表达式,只需使用不带作用域的

<c:set var="id" value="#{user.id}" />

但是要把它放在
之外。同样在这个结构中,它有点奇怪。这并不能使代码变得更好。我就不说了

<f:setPropertyActionListener ... value="#{user.id}" />

另见:

与具体问题无关,如果您使用的是EL2.2(正如您使用的是JSF2.2一样,您无疑是这样,因为它至少需要Servlet 3.0,与EL2.2齐头并进),那么只需将其作为bean操作方法参数传递,而无需
混乱。另见a.o.和


另一个无关的注意事项是,这样的“查看用户”或“编辑用户”请求通常是幂等的。对此,您最好使用
(是的,使用
)。另见a.o.和


哦,围绕着
  • 在HTML透视图中是没有意义的。扔掉它,改用
    。另请参见。

    我不知道它是否会工作,但如果它真的能工作,它不应该是
    value=“#{user.id}”
    ?您在示例中遗漏了
    user
    ,那么它如何知道您在谈论哪个
    id
    。我作为
    id
    引用
    ui:param
    而不是
    用户
    成员。我会试试你的建议。是的,那确实有效!非常感谢。只是想知道,是否可以让
    setPropertyActionListener
    标记使用
    param
    值?我不确定,Steve。我仍然在学习自己,而且。我实际上已经决定结束这个问题,但现在巴卢斯克已经回答了,它突然变得有价值了。Mods,请忽略我的旗帜。很遗憾我还不能投票,但谢谢你!另外,你的教程也很有帮助。
    <f:setPropertyActionListener ... value="#{user.id}" />
    
    <h:commandButton ... action="#{userService.toUserInfo(user.id)}">