【问题标题】:Creating an "Edit my Item"-page in Java Server Faces with Facelets使用 Facelets 在 Java Server Faces 中创建“编辑我的项目”页面
【发布时间】:2010-12-04 07:42:13
【问题描述】:

假设您有以下 Facelet(使用 Facelets 1.1.12):

edit_item.xhtml which i access with edit_item.jsf

现在我有另一个页面将我发送到带有 GET 参数 ID 的 edit_item.jsf,uri 看起来像这样:http://mysite.com/edit_item.jsf?ID=200

您如何访问 Bean 并获取信息,并使用 JSF 和 Facelets 将其显示在请求页面上?有没有办法在页面加载时运行 bean?

【问题讨论】:

    标签: java jsf facelets


    【解决方案1】:

    您可以使用faces-config.xml 配置从param 映射中注入ID。

    对于这个简单的 bean:

    public class BeanWithId implements Serializable {
      private String id;
      private String info;
    
      private void populateInfo() {
        info = "Some info from data source for id=" + id;
      }
    
      public String getId() { return id; }
    
      public void setId(String id) {
        this.id = id;
        populateInfo();
      }
    
      public String getInfo() { return info; }
      public void setInfo(String info) { this.info = info; }
    
      public String save() {
        System.out.println("Saving changes to persistence store");
        return null; // no navigation
      }
    }
    

    您可以使用此定义注入 ID:

      <managed-bean>
        <managed-bean-name>beanWithId</managed-bean-name>
        <managed-bean-class>datasource.BeanWithId</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
          <property-name>id</property-name>
          <property-class>java.lang.String</property-class>
          <value>#{param.ID}</value>
        </managed-property>
      </managed-bean>
    

    小面形式:

    <h:form>
      <p>ID: <h:outputText value="#{beanWithId.id}" /></p>
      <p>Info: <h:inputText value="#{beanWithId.info}" /></p>
      <p><h:commandLink action="#{beanWithId.save}" value="Save">
        <f:param name="ID" value="#{param.ID}" />
      </h:commandLink></p>
    </h:form>
    

    这不是唯一的方法(例如,您可以使用 FacesContext 直接查找 ID)。

    【讨论】:

    • 这正是我要找的,非常感谢。一旦我测试了这个,我会报告!
    • 工作得很好,但是一旦你按下“保存”,param.ID 就消失了,你会得到一个内部服务器错误,说没有属性“ID”。你会怎么解决?似乎我是否添加导航以从保存返回并不重要,无论如何都要得到它。有什么建议吗?
    • 应该测试过代码!我将commandButton 切换为commandLink 并将param 添加到其中。我看到您对此还有另一个问题 - 这里有几个选项,所以我会在那里发布答案。
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多