小编per*_*ssf的帖子

f:未调用setPropertyActionListener

我试图p:dialog移出一个h:form,因为我已经读到这是首选方式(但我想了解原因,因为我的p:dialog内部form在我的应用程序中运行良好).

唯一的困难是对话标题需要动态更新.p:dataTable单击a中的按钮时会显示该对话框.

这是我的旧xhtml(在更改之前),这工作正常:

<p:dataTable var="event" value="#{eventBean.lazyModel}" selection="#{eventBean.selectedEvent}" />
    ...
    <p:column headerText="#{msgs.Persons}">
        <p:commandButton value="#{msgs.ViewPersons}" update=":viewPersonsForm" oncomplete="viewPersonsDlg.show()"> 
            <f:setPropertyActionListener value="#{event}" target="#{eventBean.selectedEvent}" />
        </p:commandButton>
    </p:column>
</p:dataTable>
<h:form id="viewPersonsForm">
    <p:dialog modal="true" widgetVar="viewPersonsDlg" dynamic="true" header="#{eventBean.selectedEvent.name}" >
        ...
    </p:dialog>
</h:form>
Run Code Online (Sandbox Code Playgroud)

这是新的xhtml,没有调用eventBean #setSelectedEvent().

<p:dataTable var="event" value="#{eventBean.lazyModel}" selection="#{eventBean.selectedEvent}" />
    ...
    <p:column headerText="#{msgs.Persons}">
        <p:commandButton value="#{msgs.ViewPersons}" update=":viewPersonsDlgId" oncomplete="jQuery('#viewPersonsDlgId .ui-dialog-title').text('#{eventBean.selectedEvent.name}');viewPersonsDlg.show()"> 
            <f:setPropertyActionListener value="#{event}" target="#{eventBean.selectedEvent}" />
        </p:commandButton>
    </p:column>
</p:dataTable>
<p:dialog modal="true" id="viewPersonsDlgId" widgetVar="viewPersonsDlg" dynamic="true" >
    ...
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

那么,再次,为什么在第二个场景中没有调用eventBean #setSelectedEvent()?并且,如果可能,为什么第一种情况不是最优的?

jsf primefaces

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

加载数据表后触发 JavaScript 动作

JSF 2.1+ PrimeFaces 3.2web 应用程序中,我需要在p:dataTable加载a 后触发 JavaScript 函数。我知道这个组件中没有这样的事件,所以我必须找到一个解决方法。

为了更好地理解场景,在页面加载时不呈现 dataTable。它在成功登录后呈现:

<p:commandButton value="Login" update=":aComponentHoldingMyDataTable" 
                                    action="#{loginBean.login}" 
                                    oncomplete="handleLoginRequest(xhr, status, args)"/>
Run Code Online (Sandbox Code Playgroud)

从上面的代码可以看出,我在成功登录后有一个 JavaScript 钩子,如果它有帮助的话。该update属性强制 dataTable 的呈现属性重新评估:

<p:dataTable  var="person" value="#{myBean.lazyModel}" rendered="#{p:userPrincipal() != null}" />
Run Code Online (Sandbox Code Playgroud)

加载数据表后,我需要在每个行项目上运行一个 JavaScript 函数,以便订阅一个cometD主题。

理论上我可以使用oncomplete登录按钮的属性来触发一个属性myBean,以便再次检索要显示在数据表中的值,但它似乎不是很优雅。

JavaScript 函数应该rowKey对 dataTable 的每一行做一些事情:

function javaScriptFunctionToBeTriggered(rowKey) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

javascript jsf primefaces

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

Java EE 6 @Startup和@Schedule永远不会被执行

我确信这个问题已被无数次问过,但我已经尝试了所有我读过的内容,似乎没有任何工作.我确信修复可能也很简单.

我有以下单例,应该在Web应用程序启动时执行但不执行,并且计划任务也不会运行.

@Singleton
@Startup
public class Scheduler {

    private static int count = 0;

    @PostConstruct
    public void onStartup() {
        System.out.println("Initialization success.");
    }

   @Schedule(second="*/10", minute="*", hour="*")
   public void execute() {
      System.out.println("its running count..."+count);
      count++;
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Glassfish服务器3.1.2.

任何帮助将不胜感激.

谢谢.

编辑

现在正在执行启动方法,但调度方法不会运行.

singleton ejb scheduling startup java-ee

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

联接字段上的JPA查询过滤器

我想使用"name + surname"字符串作为键来查询我的"customers"表.

姓名和姓氏存储在不同的字段中.

所以我的查询是:

SELECT 
   * 
FROM 
   customers 
WHERE 
   CONCAT(name,' ',surname) LIKE '%term%' 
   OR CONCAT(surname,' ',name) LIKE '%term%' 
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样做,我的查询是JPA2 条件查询.就像是:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
            CriteriaQuery cq = cb.createQuery();
            Root<Customer> from = cq.from(Customer.class);
            cq.select(from);

            Predicate whereClause = cb.or(
                cb.like(from.<String>get("name"), "%"+ r +"%"),
                cb.like(from.<String>get("surname"), "%"+ r +"%"),
            );

            cq.where(whereClause);      
            TypedQuery<Customer> query = getEntityManager().createQuery(cq);
            list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

如何通过姓名和姓氏的组合过滤我的结果集,好吗?

hibernate jpa criteria-api jpa-2.0

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

Glassfish登录NetBeans:Domain Pinged

有时我在NetBeans的Glassfish日志窗口中收到此消息:

Domain Pinged: stable.glassfish.org
Run Code Online (Sandbox Code Playgroud)

有谁知道这意味着什么?

netbeans ping glassfish

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

JPA Criteria Disjunction

我试图学习和理解JPA标准.到目前为止,我在SQL方面非常有能力,并且在Hibernate Criteria和HQL方面非常有能力.

我试图用一个OR语句做一个相当简单的选择.

在纯SQL中,我的选择如下所示:

SELECT * FROM CHANGED_LOG
WHERE key1 = 52540 AND objectCode = 'Order'
OR key1 = 48398 AND objectCode = 'Package'
Run Code Online (Sandbox Code Playgroud)

这给了我每一行key1 = 52540和objectCode等于Order AND的每一行key = 48398和objectCode等于Package.这正是我想要的.

所以尝试用JPA标准(这看起来格外复杂......),我到目前为止最好的猜测是:

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();

    CriteriaQuery<ChangedLogBean> query = builder.createQuery(ChangedLogBean.class);
    Root<ChangedLogBean> from = query.from(ChangedLogBean.class);
    CriteriaQuery<ChangedLogBean> select = query.select(from);

    Predicate orderChangedLogBeans = builder.conjunction();
    builder.and(orderChangedLogBeans, builder.equal(from.get("key1"), orderId));
    builder.and(orderChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.OrderBean));

    Predicate packageChangedLogBeans = builder.conjunction();
    builder.and(packageChangedLogBeans, builder.equal(from.get("key1"), packageId));
    builder.and(packageChangedLogBeans, builder.equal(from.get("objectCode"), ChangedLogBean.ObjectType.PackageBean));

    Predicate orderOrPackage = builder.disjunction();
    orderOrPackage.getExpressions().add(orderChangedLogBeans);
    orderOrPackage.getExpressions().add(packageChangedLogBeans);

    query.where(orderOrPackage);

    return entityManager.createQuery(select).getResultList();
Run Code Online (Sandbox Code Playgroud)

哇.一个简单查询的很多行...但是,这仍然从数据库向我的每一行返回.

我在这做错了什么?

谢谢你所有有用的答案:)

hibernate jpa criteria criteria-api

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

Web过滤器会破坏PrimeFaces的移动视图

在使用PrimeFaces 3.4.2的JSF2.1 Web应用程序中,我添加了一个只包含一个视图的新网页renderKitId="PRIMEFACES_MOBILE"(PFM 0.9.3).我们的想法是,过滤器会将来自移动设备的请求重定向到此页面.不幸的是,这个过滤器在某些移动设备上完全破坏了移动页面的CSS(是的,并非所有设备都受到影响!).当过滤器在那里时,重定向的呼叫和直接的呼叫在受影响的设备上被破坏; 当过滤器关闭时,一切正常.

这里是网络过滤器:

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;

    boolean isMobile = isMobileDevice(req.getHeader("user-agent"));  // utility function

    if (!req.getRequestURI().contains("/mobile/") && isMobile) {
        resp.sendRedirect(req.getContextPath() + "/faces/mobile/index.xhtml");
    } else {
        chain.doFilter(request, response);
    }    
}
Run Code Online (Sandbox Code Playgroud)

过滤器在web.xml中没有任何映射.仅存在注释@WebFilter("/*").当注释中的路径伪造时,一切都运行良好.

xhtml页面......非常简单:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:pm="http://primefaces.org/mobile" >
    <h:head>
    </h:head>
    <h:body>
        <f:view renderKitId="PRIMEFACES_MOBILE"> …
Run Code Online (Sandbox Code Playgroud)

mobile jsf primefaces servlet-filters

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

如何生成OR语句的谓词数组

我试图使用Criteria API而不是像JPQL Strings一样构造查询,因为Criteria API似乎更适合这个.但是,我在理解如何构造以下两个语句时遇到了一些问题.

SELECT e 
FROM Subject e 
WHERE e.company = :c1 
OR e.company = :c2 
OR e.company = :c3
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要迭代未知数量的值(c1,c2,c3等)以匹配相同的属性.

SELECT e 
FROM Subject e 
WHERE e.company 
LIKE :c1 
OR e.account 
LIKE :c1 
OR e.email 
LIKE :c1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要传入单个值(c1)并对特定范围的属性进行"LIKE"比较.

我目前的模式看起来像这样:

// Criteria
CriteriaBuilder builder = subjectDAO.criteriaBuilder();
CriteriaQuery<Subject> query = builder.createQuery(Subject.class);

// Root
Root<Subject> subject = query.from(Subject.class);

List<Predicate> predicates = new ArrayList();

for (String property : map.keySet()) {
    String value = (String) coreFilter.get(map);
    predicates.add(????? This is where I come unstuck …
Run Code Online (Sandbox Code Playgroud)

jpa criteria-api

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

当单击commandButton时,Primefaces dataTable会多次调用方法。为什么?

<p:commandButton value="Get Name List" update="nameinfo"/>
<p:dataTable id="nameinfo" var="nam" value="#{namefinder.dofind}"></p:dataTable>
Run Code Online (Sandbox Code Playgroud)
  • “namefinder”是托管 bean [ @ManagedBean(name = "namefinder")]
  • “dofind”是查找名称列表的方法,它返回值作为 namefinder 类对象列表

    问题是:“dofind”方法被调用 7 次。

    为什么要这样做?

jsf primefaces

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

具有自定义布局的ListFragment:始终显示空消息

ListFragment使用默认设置创建了一个自定义布局ArrayAdapter。我的问题是,当列表不为空时,每行上都会显示空消息(当列表为空时,该消息仅按预期显示一次)。

headline_list.xml(即我的自定义布局文件)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@id/android:list" />

    <TextView android:id="@+id/my_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView android:id="@id/android:empty"
        android:text="There are no data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/> 

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

HeadlineFragment.java

public class HeadlineFragment extends ListFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        return inflater.inflate(R.layout.headline_list, container, false);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        List<String> headlines = ...;          // populate headlines list

        setListAdapter(new ArrayAdapter<String>(getActivity(),
                R.layout.headline_list, R.id.my_text, headlines));
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

android android-arrayadapter android-listfragment

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