相关疑难解决方法(0)

如何在ap:对话框中显示p:dataTable中当前行的详细信息,并在保存后更新

我有一个JSF 2应用程序,它有两个页面,一个用于列出学生,另一个用于显示给定学生的详细信息.列表页面包含指向学生表每行中详细信息页面的链接,该页面在浏览器中打开一个新选项卡,以便在单击时显示这些详细信息.

现在,需求已更改为在新选项卡中显示详细信息,但在列表页面中的模式对话框中.

我的想法是简单地将详细信息页面内容嵌入到模态对话框中,这样列表页面就不会太大而且难以维护.在这里开始我的怀疑.经过一番研究后,我将列表每行中的链接更改为以下按钮:

<p:commandButton value="Details" type="button"
                 onclick="PF('dialog-details').show()">
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)

该对话框声明如下:

<p:dialog widgetVar="dialog-details" header="Details" modal="true" width="95%">
    <ui:include src="student_details.xhtml">
        <ui:param name="id" value="#{student.id}"/>
    </ui:include>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

最后,详细信息页面更改为如下所示:

<ui:composition
    xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <f:metadata>
        <f:viewParam name="id" value="#{studentBean.id}" />
    </f:metadata>

    <h1 class="title ui-widget-header ui-corner-all">Details of #{studentBean.bean.name} / #{studentBean.bean.number}</h1>
</ui:composition>                       
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时,对话框确实显示,内容是详细信息页面.我在对话框中看到以下内容:

Details of  / 
Run Code Online (Sandbox Code Playgroud)

根本没有错误,但应该显示的数据不是.设置了断点StudentBean.setId()(此方法加载以beanStudent传递的id对应的实例命名的属性),但它永远不会被命中.

经过一段时间的思考,我才明白为什么它不起作用.传递给详细信息页面的参数是student.id,但是在显示所有学生时student使用的名称,因此无效在其中.var<p:datatable/>student<p:dialog/><p:datatable/>

所以,我需要的是一种使用给定行中相应学生的id来显示对话框的方法.理想情况下,我想在这里进行ajax调用,因此细节只有在被绑定时才会加载.

有任何想法吗?

datatable jsf dialog master-detail primefaces

8
推荐指数
1
解决办法
1万
查看次数

使用Java Generics为实体实现转换器

我正在使用Spring和Hibernate开发JSF项目,其中包括许多Converter遵循相同模式的s:

  • getAsObject 接收对象id的字符串表示形式,将其转换为数字,并获取给定种类的实体和给定的id

  • getAsString receive和entity并返回转换为的对象的id String

代码基本上是以下内容(省略检查):

@ManagedBean(name="myConverter")
@SessionScoped
public class MyConverter implements Converter {
    private MyService myService;

    /* ... */
    @Override
    public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
        int id = Integer.parseInt(value);
        return myService.getById(id);
    }

    @Override
    public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
        return ((MyEntity)value).getId().toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于大量的ConverterS中的完全一样(除了类型MyServiceMyEntity当然的),我想知道,如果它使用一个通用的转换器是值得的.通用本身的实现并不困难,但我不确定声明Beans的正确方法.

可能的解决方案如下:

1 - 编写通用实现,让我们调用它MyGenericConverter,不需要任何Bean注释

2 - 将特定转换器ad写为子类,MyGenericConverter<T>并根据需要对其进行注释:

@ManagedBean(name="myFooConverter")
@SessionScoped
public class MyFooConverter implements MyGenericConverter<Foo> { …
Run Code Online (Sandbox Code Playgroud)

java generics jsf spring converter

7
推荐指数
1
解决办法
1万
查看次数

JSF 中 MVC 的矛盾解释

我开始学习 JSF,但首先我想了解它作为 MVC 框架的总体情况。

有几个得到很多赞同的答案解释了 JSF 中的 MVC 层,但它们通常是相互矛盾的。

BalusC的回答: JSF MVC框架中的MVC是什么组件?

在大的架构图中,您自己的 JSF 代码是V

M - 业务领域/服务层(例如 EJB/JPA/DAO)
V - 您的 JSF 代码
C - FacesServlet

在开发者图中,架构V依次可分如下:

M - 实体
V - Facelets/JSP 页面
C - 托管 bean

Jigar Joshi 在同一线程中的回答:

模型将是你的ManagedBean

视图将是jspXHTML(好吧,你可以在这里容纳各种视图)

控制器将是FacesServlet

这里,对这个问题的另一种看法:

在 JSF 中,您不实现控制器。因此,支持 bean 或任何其他类型的托管 bean 都不是控制器

还有一个,这次不是来自 Stackoverflow:

在 JSF 中,主控制器始终是 FacesServlet。子控制器被合并到各种控制元素标签实现中。您几乎从未在 JSF 中编写控制器代码,因为它都是预先提供的。因此,您只需提供视图模板 (xhtml) 和模型(支持 …

java model-view-controller jsf

5
推荐指数
1
解决办法
1044
查看次数

创建主 - 详细信息表和对话框,如何重用相同的对话框进行创建和编辑

我正在尝试创建一个对话框,用于创建对象和更新对象.因此,如果我碰巧点击"新建"按钮,我将看到一个包含要填充的空字段的对话框,或者如果我单击某个条目的编辑按钮,该条目的数据将显示在对话框中以进行更新.

按照版本5.2的primefaces展示中的示例,我可以以只读的outputText形式呈现数据,但是当我将其更改为inputText时,该字段保持为空.以下代码是我的例子:

<h:form id="form">    
  <p:dataGrid id="guestList" var="guest" value="${guestList.guests}" columns="3" paginator="true" rows="20">
    <f:facet name="header">
      Guest List
    </f:facet>

    <p:panel>
      <h:outputText value="${guest.name}" />
      <br />
      <h:outputText value="${guest.street}" />
      <br />
      <h:outputText rendered="#{guest.street2.length() gt 0}"
        value="${guest.street2}" />
      <h:panelGroup rendered="#{guest.street2.length() gt 0}">
        <br />
      </h:panelGroup>
      <h:outputText value="${guest.city}, " />
      <h:outputText value="${guest.state} " />
      <h:outputText value="${guest.zipCode}" />
      <p:commandButton update="@form:newGuestDetail" oncomplete="PF('newGuestDialog').show()" icon="ui-icon-edit" styleClass="ui-btn-inline">
        <h:outputText styleClass="ui-icon ui-icon-edit" style="margin:0 auto;" />
        <f:setPropertyActionListener value="#{guest}" target="#{guestList.selectedGuest}" />
      </p:commandButton>
    </p:panel>
  </p:dataGrid>

  <p:dialog header="#{guestList.hasSelected() ? 'Edit Guest' : 'New Guest'}" widgetVar="newGuestDialog" modal="true" showEffect="fade" …
Run Code Online (Sandbox Code Playgroud)

jsf dialog master-detail primefaces

3
推荐指数
1
解决办法
1981
查看次数

如何防止JSF中的硬编码依赖?

如果我使用JSF(版本1.2或2.0),我可以管理JavaBean类,它们包含JSF页面调用或使用的方法.

我可以使用faces-config.xml或使用@ManagedBean注释.每种解决方案都有问题,我必须提到具体的类.通过这种方式,我构建了一个特定类的硬引用.

在JSF中存在一种解决方案,用于引用javabean实现的接口faces-config.xml或带有@ManagedBean注释的抽象类.我的意思是:我不会提到具体的类,我将引用一种抽象方式,为我的应用程序提供一种可能性,通过适当程度的维护来改变或增长.

java jsf

2
推荐指数
1
解决办法
161
查看次数

如何将bean属性从一个视图传递到另一个视图

我正在使用JSF 2.1和Primefaces:

我有一个带有托管属性的视图作用域托管bean,以及一个在其他视图范围内的托管bean上设置内容并转发到引用该托管bean的其他页面的方法:

@ManagedBean
@ViewScoped
public class HelloMB {

   @ManagedProperty("otherMB")
   private OtherMB other;

   public String changeOtherMB() {
      otherMB.setAnyObject(new Object());
      return "otherPage.xhtml";
   }

}

@ManagedBean
@ViewScoped
public class OtherMB {

   private Object o;    

   public void setAnyObject(Object o) {
      this.o = o;
   }

}
Run Code Online (Sandbox Code Playgroud)

因此,当渲染otherPage时o为null.

你知道我怎么能解决这个问题?如何在@ViewScoped托管bean中保留对象并将其保存在其他页面上而不使用@SessionScoped

jsf parameter-passing managed-bean view-scope

2
推荐指数
1
解决办法
4183
查看次数

JSF Datatable链接到另一个页面

我有这张桌子:

<p:dataTable value="#{requestBean.requestsList}" var="requestClass" style="width:50px;" id="requestList">  
    <p:column>  
        <f:facet name="header">  
            <h:outputText value="ID" />  
        </f:facet>  
        <h:outputText value="#{requestClass.requestID}" />  
    </p:column>  

    <p:column>  
        <f:facet name="header">  
            <h:outputText value="Status" />  
        </f:facet>  
        <h:outputText value="#{requestClass.requestStatus}" />  
    </p:column>  

    <p:column>  
        <f:facet name="header">  
            <h:outputText value="Details" />  
        </f:facet>  
        <h:outputText value="#{requestClass.requestTitle}" />  
    </p:column>
</p:dataTable>  
Run Code Online (Sandbox Code Playgroud)

现在行正确显示数据,但我希望能够单击记录ID.当我这样做时,我会转到另一个页面,例如review.xhtmlurl参数将是该ID.所以这样的事情:review.xhtml?id="clicked request".怎么做的?

更新:我试过这个并且它确实有点工作,但它在实践中是否正确?

<p:column>  
    <f:facet name="header">  
        <h:outputText value="ID" />  
    </f:facet> 
    <a href="review.xhtml?id=#{requestClass.requestID}">
        <h:outputText value="#{requestClass.requestID}" />  
    </a>
</p:column>  
Run Code Online (Sandbox Code Playgroud)

java jsf primefaces

0
推荐指数
1
解决办法
9073
查看次数

使用JSF,JDBC和HttpServlet在dataTable中搜索和检索数据

以下是我的代码我的bean

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

/**
 *
 * @author utilisateur
 */
@ManagedBean(name="Beansearch")
@SessionScoped
public class Beansearch extends HttpServlet {
    ResultSet rs;
    private String cond;

    public String getcond() {
        return this.cond;
    }
    public void setcond(String cond) {
        this.cond= cond;
        }


   private List perInfoAll = new ArrayList();

    private int i;
public  List getperInfoAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException {
    String value = req.getParameter("cond");
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver"); …
Run Code Online (Sandbox Code Playgroud)

datatable jsf servlets jdbc

-2
推荐指数
1
解决办法
1万
查看次数