当前位置: 首页 > 知识库问答 >
问题:

未调用操作bean

廉志强
2023-03-14

我在使用JSF2.0时遇到了问题。命令按钮不调用bean,我已经阅读了balusc应答commandbutton/commandlink/ajax action/listener方法未调用或输入值未更新,但我认为我不会遇到这些情况,这就是我使用的代码:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jstl/core">


    ....   

<ui:repeat var="skill" value="#{skillsView.skills}">
    <h:form>


            <h:commandButton value="#{skill}"
                action="#{skillsController.removeSkillFromPublication}"  ajax="true">
                <f:param name="theskill" value="#{skill}" />
            </h:commandButton>


    </h:form>
</ui:repeat>

</ui:composition>

更新1:

@Controller
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
public class SkillsController extends BController {

    private static final Logger logger = LoggerFactory
            .getLogger(SkillsController.class);

    public void removeSkillFromPublication() {
        logger.info("Deleting : " + getParameter("theskill"));
        publicationService.removeSkillFromPublication(publicationDetailView
                .getPublicationFullView().getId(), getParameter("theskill"));
        skillsView.setSkills(publicationService
                .getSkillsFromPublication(publicationDetailView
                        .getPublicationFullView().getId()));
    }



}
@Controller
@Scope(value = WebApplicationContext.SCOPE_SESSION)
public class SkillsView {

    List<String> skills;
    private String currentSkill;


    public List<String> getSkills() {
        return skills;
    }
    public void setSkills(List<String> skills) {
        this.skills = skills;
    }
    public String getCurrentSkill() {
        return currentSkill;
    }
    public void setCurrentSkill(String currentSkill) {
        this.currentSkill = currentSkill;
    }

共有1个答案

雷晋
2023-03-14

h:CommandButton属性操作要求返回字符串

摘自JSF-Toolbox:

action
action属性接受支持bean操作方法的方法绑定表达式,以便在用户激活该组件时调用该方法。action方法必须是没有返回字符串的参数的公共方法。返回的字符串表示操作的逻辑结果(例如“成功”、“失败”等),并由JavaServer Faces MVC框架用于确定下一步显示哪个视图。[由我加粗]

<h:commandButton actionListener="${skillsController.removeSkillFromPublication()}" ajax="true">
    <f:param name="theskill" value="#{skill}" />
</h:commandButton>
public void removeSkillFromPublication(ActionEvent e) {
   //...

或者,您可以让RemovesKillFromPublication()返回一个字符串。但这似乎是错误的做法。

 类似资料:
  • 解决方案(更新): 我认为任何操作都会导致react-redux-link调用mapState函数,但是当一个操作没有改变任何事情时,情况就不是这样了。 我有一个localStorage模块,它分派操作,但不更改状态,而是写入localStorage。该模块具有容器中使用的选择器,但在状态实际更改之前不会调用这些选择器,因此只有在调度另一个更改状态的操作后,UI才会正确显示。 问题 当我把商店放在

  • 问题内容: 我需要将子组件放在primefaces子表页脚(p:columngroup type =“ footer”)中,但是标准子表渲染器不提供这种机会。所以我重写了org.primefaces.component.SubTableRenderer来添加子级渲染: } 当我将一些子组件放在p:column组中时: 呈现按钮并且onClick事件可以正常调用,但是按钮的操作和f:setPrope

  • 我以https://stackoverflow.com/a/3180885/242042中的示例为例,只是根据我的需要对其进行了调整。 这是我的豆子: 和我的JSF文件 所以它是相当相似的,但我不明白的是为什么它不想在“编辑”上调用操作。(即我在SystemOut.log上看不到任何内容) 我正在查看答案https://stackoverflow.com/A/13327382/242042,看看是

  • 我有一个JSF页面,其中有一个具有ajax=true的p:命令按钮,并在单击时呈现一个包装在p: outputGroup中的p:面板。当单击此按钮时,action方法将在ManagedBean中将show CreateUser值设置为true,这用于呈现面板。这工作正常——单击按钮后面板会正确呈现。在p:面板内还有另一个p:命令按钮。这个命令按钮不起作用,因为当我单击它时什么都不会发生。永远不会调

  • 任何人都可以指向一个官方Java文档,该文档描述了流将调用每个元素的每个“无干扰和无状态”中间操作的次数。 例如: 以上代码当前将调用< code>check方法4次。 在JDK的当前或未来版本中,方法的执行次数是否可能多于或少于从List或任何其他标准JavaAPI创建的流中的元素数量?

  • 问题内容: 我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象: 然后,我使用以下代码发送数据: 我的控制器代码如下: 我有以下问题: 但是,从不会调用Submit,但是,如果我注释掉了控制器参数,那么它将被调用,这是为什么呢? 从上面看来,控制器框架似乎无