<h: inputText внутри <t: дата не установлена - PullRequest
1 голос
/ 06 июля 2010

Я новичок в JSF.

У меня проблема с тегом. Моя страница .jsp выглядит так:

<h:form id="form1">
                <t:inputHidden id="primaryKey"
                    value="#{EditConfigurationBean.primaryKey}" forceId="true" />
                <t:inputHidden id="beanName"
                    value="#{EditConfigurationBean.beanName}" forceId="true" />
                <t:dataTable id="datatable" value="#{EditConfigurationBean.config}"  rowIndexVar="rowIndex" var="rowvar"
                    rowClasses="standardTable_Row1,standardTable_Row2" 
                    columnClasses="standardTable_Column1,standardTable_Column2,standardTable_Column3">
                        <h:column>
                            <f:facet name="header">
                                <h:panelGroup>
                                    <f:verbatim>
                                        <object width="0px" height="0px"></object>
                                    </f:verbatim>
                                    <h:outputText
                                        value="Entry Name" />
                                </h:panelGroup>
                            </f:facet>
                            <h:outputLabel value="#{rowvar.bean.name}"></h:outputLabel>
                        </h:column>
                        <t:column>
                            <f:facet name="header">
                                <h:panelGroup>
                                    <f:verbatim>
                                        <object width="0px" height="0px"></object>
                                    </f:verbatim>
                                    <h:outputText
                                        value="Entry Value" />
                                </h:panelGroup>
                            </f:facet>
                            <h:inputText styleClass="inputText" value="#{rowvar.value}"></h:inputText>
                        </t:column>
                    </t:dataTable>
                        <t:htmlTag value="div" styleClass="commandBar">

        <h:commandButton onmouseover="over(this)" onmouseout="out(this)" action="#{EditConfigurationBean.back}" id="navigation" immediate="true" value="back" styleClass="commandButton" />

        <h:commandButton onmouseover="over(this)" onmouseout="out(this)" action="#{EditConfigurationBean.update}" value="Update" styleClass="commandButton" />

    </t:htmlTag>
            </h:form>

и мой код бобов:

public class ConfigurationEditBean{
    public String getInit(){
        try {
            config = loadConfig();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (config != null)
            this.entriesCount =this.config.size();
        return "";
    }
    private int primaryKey;
    private java.lang.String beanName;
    private int entriesCount;
    private List<ConfigurationFullEntry> config;

    public int getEntriesCount() {
        return entriesCount;
    }

    public void setEntriesCount(int entriesCount) {
        this.entriesCount = entriesCount;
    }

    public void setConfig(List<ConfigurationFullEntry> config) {
        this.config = config;
    }

    public int getPrimaryKey() {
        return primaryKey;
    }

    public void setPrimaryKey(int primaryKey) {
        this.primaryKey = primaryKey;
    }

    public java.lang.String getBeanName() {
        return beanName;
    }

    public void setBeanName(java.lang.String beanName) {
        this.beanName = beanName;
    }
    private List<ConfigurationFullEntry> loadConfig() throws Exception{
        List<ConfigurationFullEntry> entriesList = new ArrayList<ConfigurationFullEntry>();
            //do load from DB
        return entriesList;
    }
    public List<ConfigurationFullEntry> getConfig() {
        return config;
    }
    public String update(){
        return "";
    }
    public String back(){
        return "";
    }
}

проблема в том, что страница отображается правильно, но когда я изменяю значение одного

тега и отправляю форму, соответствующий setXXX backbean не вызывается.

также, когда я пыталсятег inputtext за пределами

что не так с моими кодами?заранее спасибо


Обновление: это мой сгенерированный HTML, в нем не существует вложенной формы .:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="http://localhost:7001"><title>My JSF 'ConfigurationEditor.jsp' starting page</title></head><body><form id="j_id_id2" name="j_id_id2" method="post" action="/HealthMonitorConsole/ConfigurationEditor.jsf" enctype="application/x-www-form-urlencoded"><input type="hidden" id="primaryKey" name="primaryKey" value="0"><input type="hidden" id="beanName" name="beanName" value="com.pardis.healthMonitor.dm.service.ServiceBean"> <table><thead><tr><th scope="col">Name</th><th scope="col">Value</th></tr></thead><tbody id="j_id_id2:j_id_id5:tbody_element"><tr><td>Server</td><td><input id="j_id_id2:j_id_id5:0:j_id_id13" name="j_id_id2:j_id_id5:0:j_id_id13" type="text" value=""></td></tr><tr><td>arash</td><td><input id="j_id_id2:j_id_id5:1:j_id_id13" name="j_id_id2:j_id_id5:1:j_id_id13" type="text" value=""></td></tr></tbody></table><br> 
<input id="j_id_id2:j_id_id14" name="j_id_id2:j_id_id14" type="submit" value="Save" onclick="if(typeof window.getScrolling!='undefined'){oamSetHiddenInput('j_id_id2','autoScroll',getScrolling());}"> <input type="hidden" name="autoScroll"> <input type="hidden" name="j_id_id2_SUBMIT" value="1"><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="8EgC7hvJoXWgMHaUZxk5rx66APlnNueyP32ajDxbvc/i5akMf2jX5SQ5BLInRDoWgWvcMUADuXlYwCWVxYrNWghZBdlolM+1zLfQTh4aUm4="></form>
<script type="text/javascript"><!--

    function getScrolling()
    {
        var x = 0; var y = 0;if (self.pageXOffset || self.pageYOffset)
        {
            x = self.pageXOffset;
            y = self.pageYOffset;
        }
         else if ((document.documentElement && document.documentElement.scrollLeft)||(document.documentElement && document.documentElement.scrollTop))
        {
            x = document.documentElement.scrollLeft;
            y = document.documentElement.scrollTop;
        }
         else if (document.body) 
        {
            x = document.body.scrollLeft;
            y = document.body.scrollTop;
        }
        return x + "," + y;
    }

//--></script>
</body></html>

Я пишу все, как учебные примерыно это не работает!

1 Ответ

0 голосов
/ 06 июля 2010

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

public class Bean {
    private List<Item> items;

    public Bean() {
        items = itemDAO.list();
    }

    // ...
}

Альтернативой является помещение компонента в область действия сеанса, но это больше влияет на взаимодействие с пользователем.

Поскольку вы используете Томагавк, вы также можете просто установить атрибут preserveDataModel для t:dataTable на true, например:

<t:dataTable preserveDataModel="true">

Это сохранит модель данных в дереве компонентов представления (которое, в свою очередь, хранится в области действия сеанса), так что точно такая же модель данных будет доступна в следующем запросе.

Смотри также:

...