我需要根据ids提供的数组(如SELECT ... FROM table_name WHERE id IN()查询)从Oracle数据库中获取所选行.
在我试图这样做时,我试图org.hibernate.setParameterList(String name, Object[] values)在我的DAO中使用该方法如下.
@Service
@Transactional(readOnly = true, propagation=Propagation.REQUIRES_NEW)
public final class ProductImageDAO implements ProductImageService {
@SuppressWarnings("unchecked")
public List<Object[]> getFileName(String[] list) {
return sessionFactory
.getCurrentSession()
.createQuery("SELECT prodImageId, prodImage FROM ProductImage WHERE prodImageId=:list")
.setParameterList("list", list).list();
}
}
Run Code Online (Sandbox Code Playgroud)
String[]给定方法中的类型参数由相应的Spring控制器类提供.
它会导致抛出以下异常.
org.hibernate.hql.ast.QuerySyntaxException:意外的令牌:,在第1行第78列附近[从model.ProductImage中选择prodImageId,prodImage,其中prodImageId =:id0_,:id1_,:id2_,:id3_,:id4_,:id5_]
根据ids使用Hibernate的列表检索所选行的方法是什么?
我正在尝试在以下环境中创建企业Web应用程序.
我创建了一个类库(New Project - > Java - > Java Class Library)来放置remote(javax.ejb.Remote)接口,该接口由无状态会话bean实现.类库已添加到两个模块(EJB和WAR)的类路径中.
我已将远程接口和所有实体类放在类库中(我不知道这是方法).
这适用于带注释的接口@Local.@Remote当我尝试返回实体的对象列表时,当JPA涉及时,它甚至可以使用但失败并出现以下异常.
java.rmi.MarshalException:CORBA MARSHAL 1330446347也许; 嵌套异常是:org.omg.CORBA.MARSHAL:警告:IOP00810011:CDRInputStream中的ValueHandler上的readValue异常vmcid:OMG次代码:11完成:也许
完整的堆栈跟踪.
javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446347 Maybe; nested exception is:
org.omg.CORBA.MARSHAL: WARNING: IOP00810011: Exception from readValue on ValueHandler in CDRInputStream vmcid: OMG minor code: 11 completed: Maybe
at remote.admin.sessionbeans._AdminRemoteSessionBeanRemote_Wrapper.getZones(remote/admin/sessionbeans/_AdminRemoteSessionBeanRemote_Wrapper.java)
at managedbeans.ZoneBean.getZones(ZoneBean.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) …Run Code Online (Sandbox Code Playgroud) 我需要使用PrimeFaces隐藏一个数据表的所有边界,而不是全部.我尝试了很多东西,没有人工作过.有谁知道怎么做?
我已经将以下样式(单独)应用于ui-datatable该类:
border: hidden !important;
border-style: none !important;
Run Code Online (Sandbox Code Playgroud)
另一件事......
当我在eclipse中创建一个新的Java EE 6项目时,我看到了许多类型的项目....
这些不同的类型是什么?它们是什么意思?
package typecastingpkg;
public class Main
{
public static void main(String[] args)
{
byte a=10;
Integer b=(int)-a;
System.out.println(b);
int x=25;
Integer c=(Integer)(-x); // If the pair of brackets around -x are dropped, a compile-time error is issued - illegal start of type.
System.out.println(c);
Integer d=(int)-a; //Compiles fine. Why does this not require a pair of braces around -a?
System.out.println(d);
}
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,在将-x基本类型int转换为包装类型时Integer,会产生编译时错误:illegal start of type.
Integer c=(Integer)-x;
Run Code Online (Sandbox Code Playgroud)
它需要一对大括号周围的-x像Integer …
以下代码仅使用空引用作为varargs参数.
package currenttime;
import java.util.Arrays;
public class Main
{
private static void temp(String...str)
{
System.out.println(Arrays.asList(str));
}
public static void main(String[] args)
{
temp(null,null);
temp(null);
}
}
Run Code Online (Sandbox Code Playgroud)
第一次调用方法temp(null, null);显示[null, null]意味着str[0]=null和str[1]=null.
但是后来的召唤temp(null);导致NullPointerException抛出它str本身就是这样null.
如果它的类型转换为String类似的东西temp((String)null);,它可以工作和显示[null].
为什么在最后一次调用中,需要显式类型转换?在我看来,它被认为是一个字符串数组,其null引用与第一次调用不同.什么是正确的答案?
JavaScript中的以下所有表达式都非常明显.
var x = 10 + 10;
Run Code Online (Sandbox Code Playgroud)
价值x是20.
x = 10 + '10';
Run Code Online (Sandbox Code Playgroud)
x在这种情况下的值是1010因为+运算符过载.如果任何操作数是string类型,则进行字符串连接,如果所有操作数都是数字,则执行加法.
x = 10 - 10;
x = 10 - '10';
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,值x都是0因为-操作符没有以这种方式重载并且所有操作数都转换为数字,如果它们不是在执行实际减法之前(你可能会澄清,如果我错了) .
以下表达式会发生什么.
x = '100' - -'150';
Run Code Online (Sandbox Code Playgroud)
价值x是250.这似乎也是显而易见的,但这个表达看起来有点像下面的表达式.
x = '100' +'150';
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,则这两个字符串将被连接并分配100150给x.那么为什么在这种情况下进行添加呢?
编辑:
+'10' + 5返回15并'a' + + 'b'返回aNaN.有谁知道为什么?
我正在使用Spring 3.2.0和相同版本的Spring安全性.成功登录后,用户将被重定向到其中一个受保护的页面,如下所示.
public final class LoginSuccessHandler implements AuthenticationSuccessHandler
{
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException
{
Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
if (roles.contains("ROLE_ADMIN"))
{
response.sendRedirect("admin_side/Home.htm");
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Hibernate.如何在成功登录后更新数据库中的登录日期时间(上次登录)?我在登录页面上有一个提交按钮,其POST请求似乎没有映射到其相应登录控制器中的方法.登录表单的操作实际上映射到Servlet - j_spring_security_check.
spring-security.xml如果需要,整个文件如下.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http pattern="/Login.htm*" security="none"></http>
<http auto-config='true'>
<!--<remember-me key="myAppKey"/>-->
<session-management session-fixation-protection="newSession">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
<intercept-url pattern="/admin_side/**" access="ROLE_ADMIN" requires-channel="any"/>
<form-login login-page="/" default-target-url="/admin_side/Home.htm" authentication-failure-url="/LoginFailed.htm" authentication-success-handler-ref="loginSuccessHandler"/>
<logout logout-success-url="/Login.htm" invalidate-session="true" delete-cookies="JSESSIONID"/> …Run Code Online (Sandbox Code Playgroud) 我用,
其中,我使用内置安全令牌来防范CSRF攻击.
Struts表单如下所示.
<s:form namespace="/admin_side"
action="Category"
enctype="multipart/form-data"
method="POST"
validate="true"
id="dataForm"
name="dataForm">
<s:hidden name="%{#attr._csrf.parameterName}"
value="%{#attr._csrf.token}"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)
生成的HTML代码如下.
<form id="dataForm"
name="dataForm"
action="/TestStruts/admin_side/Category.action"
method="POST"
enctype="multipart/form-data">
<input type="hidden"
name="_csrf"
value="3748c228-85c6-4c3f-accf-b17d1efba1c5"
id="dataForm__csrf">
</form>
Run Code Online (Sandbox Code Playgroud)
这工作正常,除非请求是多部分,在这种情况下,请求以状态代码403结束.
HTTP状态403 - 在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到无效的CSRF令牌'null'.
类型状态报告
消息无效的CSRF令牌'null'在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到.
description禁止访问指定的资源.
该spring-security.xml文件如下.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http pattern="/Login.jsp*" security="none"></http>
<http auto-config='true' use-expressions="true" disable-url-rewriting="true" authentication-manager-ref="authenticationManager">
<session-management session-fixation-protection="newSession">
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
<csrf/>
<headers> …Run Code Online (Sandbox Code Playgroud) 注意:虽然这个问题涵盖了大量Java代码片段的长文本信息,但它仅仅针对JavaScript/jQuery以及一些PrimeFaces的东西(只是<p:remoteCommand>),如开头的介绍部分所述.
我收到来自WebSockets(Java EE 7/JSR 356 WebSocket API)的JSON消息,如下所示.
if (window.WebSocket) {
var ws = new WebSocket("wss://localhost:8181/ContextPath/AdminPush");
ws.onmessage = function (event) {
jsonMsg=event.data;
var json = JSON.parse(jsonMsg);
var msg=json["jsonMessage"];
if (window[msg]) {
window[msg](); //It is literally interpreted as a function - updateModel();
}
};
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,event.data包含一个JSON字符串{"jsonMessage":"updateModel"}.因此,msg将包含一个字符串值updateModel.
在以下代码段中,
if (window[msg]) {
window[msg](); //It is literally interpreted as a JavaScript function - updateModel();
}
Run Code Online (Sandbox Code Playgroud)
window[msg]();导致与a关联的JavaScript函数<p:remoteCommand>被调用(后者又调用actionListener="#{bean.remoteAction}"与之关联的函数<p:remoteCommand>).
<p:remoteCommand …Run Code Online (Sandbox Code Playgroud)