JSF MVC вопрос дизайна - PullRequest
       26

JSF MVC вопрос дизайна

4 голосов
/ 18 апреля 2011

У меня вопрос о бобе поддержки JSF.Прямо сейчас мой боб хранит информацию об отображении пользовательского интерфейса, а также бизнес-данные.люди предполагают, что модель и вид должны быть разделены.так что это хорошая идея для создания другого bean-компонента, содержащего данные отображения пользовательского интерфейса, и иметь ссылку на него для базового bean-компонента?

1 Ответ

8 голосов
/ 18 апреля 2011

так что это хорошая идея для создания различных bean-данных, содержащих данные отображения пользовательского интерфейса, и иметь ссылку на них на поддержку?

Да, в противном случае вы продолжаете отображать данные из модели для просмотра себя, в то время как вы можете просто позволить JSF / EL сделать это. Кстати, это не обязательно должен быть JSF @ManagedBean.

например. это плохо:

@ManagedBean
@RequestScoped
public class ProductEditor {

    private String productName;
    private String productDescription;
    private BigDecimal productPrice;

    public String add() {
        Product product = new Product();
        product.setName(productName);
        product.setDescription(productDescription);
        product.setPrice(productPrice);
        productService.save(product);
        return "view";
    }

    // In total 6 getters and setters.
}

с

<h:form>
    <h:inputText value="#{productEditor.productName}" />
    <h:inputTextarea value="#{productEditor.productDescription}" />
    <h:inputText value="#{productEditor.productPrice}">
        <f:convertNumber type="currency" currencySymbol="$" />
    </h:inputText>
    <h:commandButton value="Add" action="#{productEditor.add}" />
</h:form>

Это лучше

@ManagedBean
@RequestScoped
public class ProductEditor {

    private Product product;

    @PostConstruct
    public void init() {
        product = new Product(); // You could also preload from DB based on some ID as request parameter.
    }

    public String add() {
        productService.save(product);
        return "view";
    }

    // Only 1 getter.
}

с

<h:form>
    <h:inputText value="#{productEditor.product.name}" />
    <h:inputTextarea value="#{productEditor.product.description}" />
    <h:inputText value="#{productEditor.product.price}">
        <f:convertNumber type="currency" currencySymbol="$" />
    </h:inputText>
    <h:commandButton value="Add" action="#{productEditor.add}" />
</h:form>

См. Также примеры, представленные этим руководством по JSF 2.0 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...