我试图使用setPropertyActionListener
标记在我的支持bean中设置一个值。但是,它并没有像我预期的那样发挥作用。
上下文:userService是我的支持bean的一个实例,它包含一个int成员reqID。反过来,这是属于名为User的类的对象映射的关键。我正在尝试创建一个列出所有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
,我得到一个空指针异常。
之前,我尝试更改我的setPropertyActionListenerTag,因此它读出:
<f:setPropertyActionListener target="#{userService.reqID}" value="id"/>
给了我一个错误,因为标签发送了字符串"id"
而不是参数的int值。
有没有办法强制f:setPropertyActionListener来评估value
下的表达式?或者是否有其他标签可以让我这样做?
另外,ui:param在这里使用得恰当吗?
答案 0 :(得分:2)
df['OEDatum'] = df[['OEDatum','OEUhrzeit']].apply(lambda x: dt.datetime.combine(x['OEDatum'].date(),x['OEUhrzeit']), axis=1)
df['ODatum'] = df[['ODatum','OUhrzeit']].apply(lambda x: dt.datetime.combine(x['ODatum'].date(),x['OUhrzeit']), axis=1)
(和<f:param>
)并没有这样做。 <ui:param>
旨在向<f:param>
和<h:xxxLink>
组件的结果添加HTTP请求参数,并在<h:xxxButton>
中参数化邮件格式。 <h:outputFormat>
旨在将Facelet上下文参数传递给<ui:param>
,<ui:include>
和<ui:decorate>
。 Mojarra有一个错误,它的行为就像没有范围的<ui:define>
一样。这不是用意。
如果对于#34;别名&#34;绝对必要,请使用<c:set>
而不使用范围一个(长)EL表达。
<c:set>
将它放在<c:set var="id" value="#{user.id}" />
之外。同样在这个结构中,它有点奇怪。它并没有使代码更好。我只是遗漏它。
<h:commandLink>
无关具体问题,如果您正在使用EL 2.2(因为您使用的是JSF 2.2,毫无疑问,因为它需要最少的Servlet 3.0,与EL 2.2)携手,然后将其作为bean动作方法参数传递而不会导致<f:setPropertyActionListener ... value="#{user.id}" />
混乱。另见a.o. Invoke direct methods or methods with arguments / variables / parameters in EL和How can I pass selected row to commandLink inside dataTable?
<f:setPropertyActionListener>
又一个不相关的注释,例如&#34;查看用户&#34;或&#34;编辑用户&#34;请求通常是幂等的。为此,您最好使用<h:commandButton ... action="#{userService.toUserInfo(user.id)}">
(是的,使用<h:link>
)。另见a.o. Creating master-detail pages for entities, how to link them and which bean scope to choose和How to navigate in JSF? How to make URL reflect current page (and not previous one)。
哦,<f:param>
周围的<h:panelGrid>
在HTML视角中没有意义。摆脱它并使用<ui:repeat><li>
代替。另请参阅HTMLDog HTML Beginner tutorial。