gpt4 book ai didi

jsf-2 - 我可以在复合组件中调用 bean 上的方法吗?

转载 作者:行者123 更新时间:2023-12-04 06:49:54 25 4
gpt4 key购买 nike

我想写一个或多或少的 gemeric 组件,我在其中提交一个 Controller bean,组件应该显示一些 CRUD 按钮。

以下复合组件:

<composite:interface>
<composite:attribute name="controller" />
<composite:attribute name="object" />
</composite:interface>

<composite:implementation>

<h:panelGrid columns="3" columnClasses="celltop">
<h:commandButton id="save" value="#{msg.saveButtonLabel}"
action="#{cc.attrs.controller.save}" />
<h:commandButton id="delete" value="#{msg.deleteButtonLabel}"
action="#{cc.attrs.controller.delete(cc.attrs.object)}" />
<h:commandButton id="cancel" value="#{msg.backButtonLabel}"
action="#{cc.attrs.controller.cancel}" immediate="true" />
</h:panelGrid>

</composite:implementation>

<viewController:buttons controller="customerController" object="#{customerController.customer}"/>
@Named
@ConversationScoped
public class CustomerController implements Serializable {

public String cancel() {
customer = null;
if (!conversation.isTransient()) {
conversation.end();
}
return "cancelled";
}

当我单击“取消”按钮时导致以下异常:

javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /resources/components/viewController/buttons.xhtml @25,65 action="#{cc.attrs.controller.cancel}": Method not found: customerController.cancel()
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)

给CC的bean不能调用方法吗?

最佳答案

是的,你可以。你的错误只是你只传递了一个普通的 String 代表托管 bean 名称作为属性值

controller="customerController"

虽然您实际上应该从 EL 范围传递具体的托管 bean 实例

controller="#{customerController}"

诚然,异常消息有些误导,但它基本上只是显示属性值的 Object#toString()。如果它是一个具体的托管 bean 实例,您宁愿看到类似的东西

Method not found: com.example.CustomerController@12345678.cancel()

或其 toString() 实现返回的任何内容,如果被覆盖的话。

关于jsf-2 - 我可以在复合组件中调用 bean 上的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11994339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com