我试图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 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) 我确信这个问题已被无数次问过,但我已经尝试了所有我读过的内容,似乎没有任何工作.我确信修复可能也很简单.
我有以下单例,应该在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.
任何帮助将不胜感激.
谢谢.
编辑
现在正在执行启动方法,但调度方法不会运行.
我想使用"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)
如何通过姓名和姓氏的组合过滤我的结果集,好吗?
有时我在NetBeans的Glassfish日志窗口中收到此消息:
Domain Pinged: stable.glassfish.org
Run Code Online (Sandbox Code Playgroud)
有谁知道这意味着什么?
我试图学习和理解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)
哇.一个简单查询的很多行...但是,这仍然从数据库向我的每一行返回.
我在这做错了什么?
谢谢你所有有用的答案:)
在使用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) 我试图使用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) <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)
“dofind”是查找名称列表的方法,它返回值作为 namefinder 类对象列表
问题是:“dofind”方法被调用 7 次。
为什么要这样做?
我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)

jsf ×4
primefaces ×4
criteria-api ×3
jpa ×3
hibernate ×2
android ×1
criteria ×1
ejb ×1
glassfish ×1
java-ee ×1
javascript ×1
jpa-2.0 ×1
mobile ×1
netbeans ×1
ping ×1
scheduling ×1
singleton ×1
startup ×1