【问题标题】:Primefaces dialog doesnt show valuesPrimefaces 对话框不显示值
【发布时间】:2014-12-01 12:27:59
【问题描述】:

您好,我是 primefaces 的新手,我的数据表中显示的值存在一些问题。我从我的 sql 数据库加载数据并在 dataTable 中显示这些数据。有一个名为:“评论”的列,里面有一个按钮。如果单击此按钮,则会打开一个对话框。在这个对话框框架内,应该还有一些我在数据表中显示的相同值,但它不起作用。我无法在该对话框框中显示值。我搜索了很多并尝试了很多,但没有任何帮助。 这是xhtml:

<h:body>
    <h:form>
        <p:dataTable value="#{gutachtenBean.daten}" var="auftrag"
            rowKey="#{gutachtenBean.daten}" selectionMode="multiple">

            <f:facet name="header">
                <p:outputPanel>
                    <h:outputText value="Vorgangsliste"
                        style="position:relative; top: 4px; float:left;  font-size:14px" />
                    <h:outputText value="Search all fields:" style="margin-right:10px" />
                    <p:inputText style="width:150px" placeholder="Enter keyword" />
                </p:outputPanel>
            </f:facet>

            <p:column style="text-align:center"
                filterBy="#{auftrag.schadennummer}" headerText="Schadennummer"
                filterMatchMode="contains">
                #{auftrag.schadennummer}
            </p:column>

            <p:column style="width:150px;text-align:center"
                filterBy="#{auftrag.vorgangsnummer}" headerText="Vorgangsnummer"
                filterMatchMode="contains">
                #{auftrag.vorgangsnummer}
            </p:column>

            <p:column style="width:120px;text-align:center"
                filterBy="#{auftrag.kennzeichen}" headerText="Kennzeichen"
                filterMatchMode="contains">
                #{auftrag.kennzeichen}
            </p:column>

            <p:column style="width:100px;text-align:center"
                filterBy="#{auftrag.kennzeichen}" headerText="Organisation">
                <f:facet name="filter">
                    <p:selectOneMenu>
                        <f:selectItem itemLabel="Select One" />
                        <f:selectItems value="#{dtFilterView.brands}" />
                    </p:selectOneMenu>
                </f:facet>
            </p:column>

            <p:column style="width:220px;text-align:center"
                filterBy="#{auftrag.status}" headerText="Status"
                filterMatchMode="contains">
                #{auftrag.status}
            </p:column>

            <p:column headerText="SLA-Beginn"
                style="width:130px;text-align:center">
            </p:column>

            <p:column headerText="SLA-Laufzeit"
                style="width:130px;text-align:center">
            </p:column>

            <p:column headerText="SLA-Überschreitung"
                style="width:130px;text-align:center">
            </p:column>

            <p:column filterBy="#{auftrag.kennzeichen}"
                style="width:100px;text-align:center" headerText="Ampel">
                <f:facet name="filter">
                    <p:selectOneMenu>
                        <f:selectItem itemLabel="Select One" />
                        <f:selectItems value="#{dtFilterView.brands}" />
                    </p:selectOneMenu>
                </f:facet>
            </p:column>

            <p:column headerText="Kommentare"
                style="width:100px;text-align:center">
                <p:commandButton styleClass="viewbutton"
                    style="border-left:1px solid #666; height:20px;font-size:10px"
                    value="Open" type="button" onclick="PF('dlg1').show();" />
            </p:column>
        </p:dataTable>
        <p:commandButton styleClass="viewbutton" value="View"
            icon="ui-icon-search"
            style="border-left:1px solid #666;margin-top:10px"></p:commandButton>
    </h:form>
    <p:dialog header="Kommentar" widgetVar="dlg1" height="600px"
        width="900px">
        <h:form>
            <h:outputText value="#{auftrag.kommentar}"/>
        </h:form> 
    </p:dialog>
</h:body>

这是我的 Bean:

@ManagedBean(name="gutachtenBean")
@SessionScoped
public class GutachtenController implements Serializable{

    private static final long serialVersionUID = 8410541973590420821L;

    private DatabaseConnector connector = new DatabaseConnector();
    private List<GutachtenDaten> daten;

    public GutachtenController(){
        daten = connector.getAuftragsDaten();
    }

    public List<GutachtenDaten> getDaten() {
        return daten;
    }

    public void setDaten(List<GutachtenDaten> daten) {
        this.daten = daten;
    }
}


public class GutachtenDaten {

    private String schadennummer;
    private String kennzeichen;
    private String status;
    private String vorgangsnummer;
    private String kommentar;

    public String getSchadennummer() {
        return schadennummer;
    }

    public void setSchadennummer(String schadennummer) {
        this.schadennummer = schadennummer;
    }

    public String getKennzeichen() {
        return kennzeichen;
    }

    public void setKennzeichen(String kennzeichen) {
        this.kennzeichen = kennzeichen;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getVorgangsnummer() {
        return vorgangsnummer;
    }

    public void setVorgangsnummer(String vorgangsnummer) {
        this.vorgangsnummer = vorgangsnummer;
    }

    public String getKommentar() {
        return kommentar;
    }

    public void setKommentar(String kommentar) {
        this.kommentar = kommentar;
    }

}

我不明白为什么对话框中没有显示这些值。请有人帮忙!

【问题讨论】:

    标签: jquery jsf primefaces datatable


    【解决方案1】:

    #{auftrag} 仅在渲染期间在表格内可用。单击按钮时,您必须将选定的行放入 bean 变量中,并在对话框中显示。
    GutachtenController添加类似的内容

    private GutachtenDaten selectedGD;
    
    public GutachtenDaten getSelectedGD() {
        return this.selectedGD;
    }
    
    public void setSelectedGD(GutachtenDaten gd) {
        this.selectedGD = gd;
    }
    
    public void initSelectedGD(GutachtenDaten gd) {
        setSelectedGD(gd);
    }
    

    Kommentare按钮更改为

    <p:commandButton styleClass="viewbutton"
                     style="border-left:1px solid #666; height:20px;font-size:10px"
                     value="Open" type="button" oncomplete="PF('dlg1').show();" 
                     actionListener="#{gutachtenBean.initSelectedGD(auftrag)}" update="@widgetVar(dlg1)"/>
    

    并将对话框更改为

    <p:dialog header="Kommentar" widgetVar="dlg1" height="600px"
        width="900px">
        <h:form>
            <h:outputText value="#{gutachtenBean.selectedGD.kommentar}"/>
        </h:form> 
    </p:dialog>
    

    【讨论】:

    • 感谢您的快速响应,但它不起作用。首先,“oncomplete”甚至没有打开对话框。只有 onclick 才能打开它。其次,对话框框架内的值仍未显示。
    • 您在使用oncomplete 时是否检查了服务器和客户端的错误?没有理由它不应该工作,除非有一些例外
    • 为了确定,我已经编辑了我的答案。将initSelectedGD() 方法添加到GutachtenController,并将按钮的动作监听器更改为actionListener="#{gutachtenBean.initSelectedGD(auftrag)}"。如果在initSelectedGD()中下断点,是否进入方法?
    • 我在 initSelectedGD 方法中放了一个记录器,但他没有记录,这意味着他甚至没有进入这个方法。我需要为 actionListener 做些什么额外的事情吗?我在 commandButton 中使用 actionListener,但在我的 GutachtenController 类中与按钮的 actionListener 不同。
    • 您使用的是哪个 JSF 版本?此语法适用于 JSF 版本 > 2,如果您使用的是早期版本,我将编辑我的答案,但在这种情况下,您至少应该得到一些例外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2013-06-28
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多