我已经知道如何"从datatable创建实体类"以及如何使用它们等,但是创建的实体类并不完全符合我的要求.
例如
Long
而不是BigDecimal
或类似我想知道是否有办法改变那些实体模板?
在我的NetBeans IDE中,我找不到这样做的方法,因此禁用"在编辑器中打开"按钮,如下所示.
那么,是否可以改变这些实体类的创建方式?如果是的话,在哪里以及如何这样做?
在我的JSF视图中p:selectCheckboxMenu
,我想要通过AJAX对所选值执行某些业务逻辑.
对于一个简单的change
事件,它工作正常,但对于一个toggleSelect
事件没有.在我的监听器方法中,我正在检索旧的选择,但我期待这里的新选择.
请参阅以下示例:
@ViewScoped
@Named
public class RequestBean implements Serializable {
private List<String> list; // + getter/setter
@PostConstruct
private void init() {
list = new ArrayList<String>() {{
add("one"); add("two"); add("three");
}};
}
public void listener() {
System.out.println("Current content of \"list\":");
for(String s : list) {
System.out.println(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在JSF视图中:
<p:selectCheckboxMenu value="#{requestBean.list}" label="List">
<f:selectItem itemValue="one" itemLabel="one"/>
<f:selectItem itemValue="two" itemLabel="two"/>
<f:selectItem itemValue="three" itemLabel="three"/>
<p:ajax event="toggleSelect" listener="#{requestBean.listener}" />
<p:ajax event="change" listener="#{requestBean.listener}" />
</p:selectCheckboxMenu>
Run Code Online (Sandbox Code Playgroud)
现在让我们考虑以下用例:您正在进入视图,选择"一个"和"两个".如果我单击"全选"复选框,结果为:
Info: Current …
Run Code Online (Sandbox Code Playgroud) 我明白,调用带@Remove
注释的方法会告诉 EJB 容器,客户端不再需要有状态 EJB 的实例,并且可以在调用后删除它。
但在 Oracle JEE 教程中,此方法用于“清理”实例。例如,请参见此处:
@Stateful
public class CartBean implements Cart {
// ...
List<String> contents;
// ...
@Remove
public void remove() {
contents = null;
}
}
Run Code Online (Sandbox Code Playgroud)
(来自https://docs.oracle.com/javaee/6/tutorial/doc/bnbod.html)
该成员List<String> contents;
已设置为,null
但我认为没有任何理由这样做。当实例被删除时,它不会杀死所有这些类型的引用吗?
我可以想象,当实例被释放时,需要执行一些业务任务,但是在调用该@Remove
方法之后,它或多或少会直接调用一些@PreDestroy
方法,然后我可以执行这些任务。那么为什么我们有这种特殊的@Remove
方法机制,而不是像……EJBContainer.remove(myBean)
您能否澄清@Remove
注释的目的和/或提供一些易于理解的用例示例,在这些示例中很明显地看到我们为什么需要这种机制?
我使用Primefaces DialogFramework与
我的问题是,如果用户知道我的对话框的位置,他可以直接通过URL访问它.我不希望这是可能的,所以我认为它可以将对话框放在我的web-app的WEB-INF文件夹中,但是现在,如果我想打开对话框,我会得到一个FileNotFound-Exception.
如果我的对话框位于某个常规文件夹中,则可以正常工作
RequestContext.getCurrentInstance().openDialog("/myfolder/mydialog");
// this works as expected
Run Code Online (Sandbox Code Playgroud)
但如果它位于WEB-INF中,则它不再起作用
RequestContext.getCurrentInstance().openDialog("/WEB-INF/mydialog",options,null);
// this is causing a fileNotFoundException
Run Code Online (Sandbox Code Playgroud)
我也尝试为此设置导航规则faces-config
但是再次没有成功
<navigation-case>
<from-outcome>mydialog</from-outcome>
<to-view-id>/WEB-INF/mydialog.xhtml</to-view-id>
<redirect />
</navigation-case>
Run Code Online (Sandbox Code Playgroud)
我如何打开位于WEB-INF文件夹中的对话框,或者根本不可能?提前致谢
在GlassFish主页上说明了这一点
Java EE 7需要JDK 7或更高版本,建议GlassFish 4.1使用JDU 8 u20或更高版本.
所以我想知道,为什么建议在JDK 8下使用它,因为GlassFish 4.1是一个Java EE 7应用服务器?
是否因为我将能够使用新的Java 8功能?或者有更深层次的原因,比如稳定性,知道错误等等.那么GlassFish 在JDK 8上的运行效果确实比在JDK 7上运行得更好,或者我可以忽略这个语句并将其安装在JDK 7下,如果我不使用Java SE 8下提供的新功能?
在我的JSF视图中,我使用的是p:selectOneRadio.现在我必须在客户端更改此组件的值作为副作用.在这个组件的Client Side API中,我发现以下内容,如果我找到了正确的方法,我认为我可以使用它:
PrimeFaces.widget.SelectOneRadio=PrimeFaces.widget.BaseWidget.extend(
{
// ...
select:function(a){
this.checkedRadio=a;
a.addClass("ui-state-active")
.children(".ui-radiobutton-icon")
.addClass("ui-icon-bullet").removeClass("ui-icon-blank");
a.prev().children(":radio").prop("checked",true)}
});
Run Code Online (Sandbox Code Playgroud)
对我来说(没有太多关于JS的知识)看起来我必须传递类似于我想要选择的单选按钮的实例.我已经通过多种方式尝试过这种方法,但它们都不起作用:
<p:selectOneRadio widgetVar="sel" id="id-sel" >
<f:selectItem itemValue="#{false}" itemLabel="n/a" />
<f:selectItem itemValue="#{true}" itemLabel="date" />
</p:selectOneRadio>
<p:commandButton onclick="PF('sel').select(sel.inputs[1]);"/>
<p:commandButton onclick="PF('sel').select(PF('sel').inputs[1]);"/>
<p:commandButton onclick="PF('sel').select( $('input:radio[id*=id-sel\\:1]') );"/>
<p:commandButton
onclick="PF('sel').select(document.getElementById('menuform:id-sel:1'));"/>
Run Code Online (Sandbox Code Playgroud)
但是,我也尝试直接传递值和/或标签(这适用于selectOneMenu).再次没有成功(但在这种情况下并不奇怪)
<p:commandButton onclick="PF('sel').select('date');"/>
<p:commandButton onclick="PF('sel').select('true');"/>
<p:commandButton onclick="PF('sel').select(1);"/>
<p:commandButton onclick="PF('sel').select(true);"/>
<p:commandButton onclick="PF('sel').select(#{true});"/>
Run Code Online (Sandbox Code Playgroud)
谁知道该怎么办?
在一个应用程序中,有多个实体类,对于这些实体类,应禁止对数据库的更新语句。我想插入数据库并从中读取数据,但是从不对现有记录进行任何更新。
有没有办法将整个
@Entity
班级标记为updatable=false
?
可以使用@Column(updatable=false)
或类似的注释来注释每个字段,但是出于明显的原因,我想避免这种情况。
摆脱setter方法也不是一种选择,因为实体类也用作DTO,而应用程序的其他部分则需要这些setter。因此,这将导致大量重构现有代码。
是否有另一种简单明了的方法来实现我想要的JPA 2.1 / EclipseLink(+ Extensions)
我的确认对话框出了问题.单击确认按钮后它不会关闭.如果我的表单位于选项卡视图中,则只会发生这种情况.(令人兴奋的是,如果我的表单不在标签视图中,但只有一个面板或类似的东西,那么一些代码可以正常工作.)
<h:form id="timingTableForm">
<p:dataTable var="item" value="#{requestBean.rmRequest.timingList}" id="timingDataTable" editable="true">
// some dataTable
</p:dataTable>
<p:confirmDialog closable="true" appendToBody="true" id="confirmDialog" message="#{msg.conf_deleteyesno}" header="#{msg.conf_header}" severity="alert" widgetVar="confirmation">
<p:commandButton id="confirm" value="#{msg.btn_yessure}" update="timingTableForm" oncomplete="confirmation.hide()" actionListener="#{requestBean.deleteTiming}" process="@this"/>
<p:commandButton id="decline" value="#{msg.btn_notyet}" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>
Run Code Online (Sandbox Code Playgroud)
如果我将"oncomplete"更改为"onclick"它也可以正常工作,但我希望对话框在服务器端操作完成之前不会消失.
当我按下确认按钮时,在生成的HTML中发生了一些奇怪的事情:
<div id="mainTabView:timingTableForm:confirmDialog" class="ui-confirm-dialog ui-dialog ui-widget ui-widget-content ui-overlay-hidden ui-corner-all ui-shadow" style="width: auto; height: auto;">
<div id="mainTabView:timingTableForm:confirmDialog" class="ui-confirm-dialog ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-overlay-visible" style="width: auto; height: auto; left: 994.5px; top: 186px; visibility: visible; z-index: 1006;">
Run Code Online (Sandbox Code Playgroud)
将呈现一个与我的确认对话框具有相同ID的新div.结果是一个隐藏的确认diolog(如预期的那样),但是还有一个仍然可见的新对话框.如果我再次按下确认按钮,我有2个隐藏的符合对话框和1个可见对话框等等...
难道我做错了什么?你能发现任何错误吗?或者这可能是素数面板中的错误?
先谢谢你,Fant …
在我的实体模型中,我有一个 ManyToMany RelationUser
和UserGroup
User 是一个公共@Entity
类,而是UserGroup
一个 Java enum
。
映射看起来像这样:
@ElementCollection(targetClass = my.package.UserRight.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "MD_USER_RIGHTS", joinColumns = @JoinColumn(name = "REF_USER_ID"))
@Column(name = "USER_GROUP")
@Getter @Setter private Set<UserRight> userGroups;
Run Code Online (Sandbox Code Playgroud)
除非我尝试访问通过 JPQL 设置的用户组,否则一切正常。我不想将来自用户实体的所有信息暴露给下一层,所以我编写了一个简单的 JPQL 查询来从我的用户实体创建一些 DTO:
简化:
public List<UserDTO> findAllActive() {
Query q = em.createQuery("SELECT NEW my.package.UserDTO(m.name, m.id, m.userGroups)
FROM User m ");
return q.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Problem compiling [SELECT NEW …
Run Code Online (Sandbox Code Playgroud) primefaces ×4
jsf-2 ×3
eclipselink ×2
java ×2
jpa ×2
client-side ×1
dialog ×1
ejb ×1
glassfish ×1
jakarta-ee ×1
java-ee ×1
javascript ×1
jpql ×1
jquery ×1
jsf ×1
netbeans ×1
templates ×1
web-inf ×1