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)}">