1

在我开始一项大型活动之前,我正在尝试做一个简单的测试。但是,这就是我被卡住的地方。测试是提交 JSF 表单,但托管 bean 操作永远不会被触发。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ice="http://www.icesoft.com/icefaces/component">
<f:view>    
<head>
<title>A B C</title>
</head>
<body>
      <h:form id="test">
        <h:inputText value="demo"/>
        <h:commandButton type="submit" value="A button" action="#{User.better}" immediate="true" />
      </h:form>
</body>
</f:view>
</html>

这是我的托管 bean

 public class User {

        public String send() {
            System.out.println("Submitting data.....");

            return null;

        }
        public void better() {
            System.out.println("In better...");

        }

    }

我已经正确设置了所有配置。我可以看到页面。但是,控件永远不会进入动作方法。怎么来的?任何建议都会很棒。

更新: 这是我的 faces-conig.xml

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
    <application>
        <view-handler>com.icesoft.faces.facelets.D2DFaceletViewHandler</view-handler>
    </application>
 <managed-bean>
  <managed-bean-name>User</managed-bean-name>
  <managed-bean-class>com.srk.beans.User</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
</faces-config>

我已将托管 bean-name 从用户更改为用户(小写),并在 .xhtml 页面中进行了相同的更改,但似乎仍然是同样的问题。

4

2 回答 2

3

尝试使用 user 而不是 User.Thus,尝试使用 user.better 而不是 User.better。您使用的是 jsf 2 还是没有?另外,发布你的 faces-config 文件

于 2014-07-27T18:19:48.913 回答
1

void直到 v2.x 才在 JSF 中支持具有返回类型的操作方法。您必须指定返回类型至少Objectbetter

public Object better() {
    System.out.println("In better...");

    return null;
}
于 2014-07-29T00:54:55.003 回答