Передача экземпляра вспомогательного компонента в качестве параметра для другого метода базового компонента

StackOverflow https://stackoverflow.com/questions/837128

Вопрос

После того, как пользователь заполнил мой компонент поддержки информацией через формы, я хочу обработать экземпляр в коде Java (например, маршалинг JAXB).

Так что на данный момент я делаю это так:

<% OtherBean.method(myBackingBean); %>

что - если я прав - не совсем современное решение :) Итак, как я могу сделать это «лучше»?

Заранее спасибо, Daniel.

Это было полезно?

Решение

Одним из решений является добавление метода действия к bean-компоненту - его можно обработать самостоятельно.

Например, этот простой бин:

public class SimpleBean {

  private String forename;
  private String surname;

  public String processData() {
    // TODO: real work
    System.out.println("forename=" + forename);
    System.out.println("surname=" + surname);
    return null; // optional navigation rule
  }

  public String getForename() {
    return forename;
  }

  public void setForename(String forename) {
    this.forename = forename;
  }

  public String getSurname() {
    return surname;
  }

  public void setSurname(String surname) {
    this.surname = surname;
  }

}

... определено в WEB-INF /face-config.xml:

<managed-bean>
    <managed-bean-name>simpleBean</managed-bean-name>
    <managed-bean-class>simplebean.SimpleBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

... может быть обработан с использованием этого JSP:

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core">
  <jsp:directive.page language="java"
    contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" />
  <jsp:text>
    <![CDATA[<?xml version="1.0" encoding="UTF-8" ?>]]>
  </jsp:text>
  <jsp:text>
    <![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]>
  </jsp:text>
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Enter Name</title>
  </head>
  <body>
  <f:view>
    <h:form>
      <h:panelGrid columns="2">
        <h:outputText value="forename:" />
        <h:inputText id="it1" value="#{simpleBean.forename}" />
        <h:outputText value="surname:" />
        <h:inputText id="it2" value="#{simpleBean.surname}" />
      </h:panelGrid>
      <h:commandButton action="#{simpleBean.processData}"
        value="process" />
    </h:form>
  </f:view>
  </body>
  </html>
</jsp:root>

Обратите внимание на привязку метода # {simpleBean.processData}. Это должен быть публичный метод, который не принимает аргументов и возвращает аргумент String (который может быть использован для навигации по страницам при желании).

Это не единственный способ добиться этого, но он довольно прост.

Другие советы

у вас может быть один компонент поддержки в качестве переменной экземпляра другого компонента. и настройте его весной или другим способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top