我正在开发的Spring MVC应用程序中使用Spring的表单标记库.我正在为之工作的公司根据某些标签的自定义属性的定义实施了一些公司范围的政策.例如,默认情况下(虽然包含标准的javascript文件)所有标签的值都会自动转换为大写.为了禁用此功能,可以通过以下方式使用自定义属性定义其标记:
<input type="text" uppercase="false" />
Run Code Online (Sandbox Code Playgroud)
问题是将这些自定义属性添加到spring:form标记会在运行时导致错误.我已经粘贴了下面的错误.
org.apache.jasper.JasperException: /WEB-INF/jsp/reportCriteria.jsp(45,5) Attribute uppercase invalid for tag input according to TLD
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法扩展TLD以允许这些属性,还是有任何其他方式将这些自定义属性添加到这些spring:form标签?
我正在使用spring注释我编写了一种方法
public ModelAndView showTestPage(@RequestParam("firstInstanceId") String id1,
@RequestParam("secondInstanceId") String id2, HttpSession session) {
ModelAndView mv = new ModelAndView("showCompareItemList");
mv.addObject("pageTitle", "showCompareItemList");
mv.addObject("firstInstanceId", id1);
mv.addObject("secondInstanceId", id2);
return mv;
}
Run Code Online (Sandbox Code Playgroud)
当id1和id2的两个值都存在时它工作正常但是当只有一个值时我得到异常org.springframework.web.bind.MissingServletRequestParameterException:必需的java.lang.String参数'secondInstanceId'不存在我试过解决这个问题通过检查null的问题,但我仍然得到这个异常,任何人都可以告诉我,我该怎么做才能避免这种情况?
我真的很欣赏Spring 3 anoation驱动的Web控制器映射
我有很多带有签名的控制器:
@RequestMapping(value = "solicitation/create",method = RequestMethod.POST)
public String handleSubmitForm(Model model, @ModelAttribute("solicitation") Solicitation solicitation, BindingResult result)
Run Code Online (Sandbox Code Playgroud)
但我的问题是,我想编写一个拦截器,它会在处理后通过BindingResults - 我如何从HttpRequest或HttpResponse获取它们?
因为intercpetor方法具有相似的签名
public boolean postHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
Run Code Online (Sandbox Code Playgroud) 请问有谁能告诉我,如何处理java中基于表单的身份验证中的j_security_check servlet?
我是否必须在web-xml文件中使用j_security_check名称映射servlet类,如:
<servlet>
<servlet-name>Anyname</servlet-name>
<servlet-class>Anyclass</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>Anyname</servlet-name>
<url-pattern>/j_security_check</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
如果我输入用户名和密码,然后单击提交,那么具有j_security_check名称的servlet 将如何处理这些信息?该servlet将如何验证那些输入的用户名和密码,并获取资源(如果是身份验证),然后授权成功,否则将出现错误页面.j_security_check servlet将如何做到这一点?
我有一个Spring MVC应用程序,它不保护用户数据的更新与事务.
它假定任何时候只有一个用户正在访问该帐户的帐户数据.
但是,如果两个用户使用相同的身份验证凭据登录,理论上可能(尽管不太可能)对同一用户数据的两个数据库更新重叠和冲突.
在Spring Security中有一种简单的方法可以防止这种情况吗?
错误信息:找不到带有URI的HTTP请求的映射[/TestSpringWebApp/hello.htm]
任何帮助将不胜感激!
我正在使用注释将请求映射到控制器.控制器代码:
@Controller
@RequestMapping("/hello.htm")
public class HelloController {
protected final Log logger = LogFactory.getLog(getClass());
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String now = (new Date()).toString();
logger.info("Returning hello view with " + now);
return new ModelAndView("hello", "now", now);
}
}
Run Code Online (Sandbox Code Playgroud)
Dispatcher-servlet.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<!--
Most controllers will use the ControllerClassNameHandlerMapping above, but
for the index controller we are using ParameterizableViewController, so we must
define an explicit mapping for it.
-->
<bean …Run Code Online (Sandbox Code Playgroud) 最初的代码是在以下结构中,它工作得很好 -
初始代码:
@Transactional
class foo
{
void public work()
{
task1;
task2;
}
}
Run Code Online (Sandbox Code Playgroud)
由于这两个任务可以并行执行,我们重构将它们置于两个线程之下.在不同的线程中编写了两个任务,并行调用它们并在调用相应的DAO时收到以下错误
没有Hibernate会话绑定到线程,配置不允许在这里创建非事务性的
由于hibernate会话绑定到当前线程,因此它会成为子线程的问题.
重构代码:
@Transactional
class foo
{
void public work()
{
final Thread t1 = new Thread(new Job1());
t1.start();
final Thread t2 = new Thread(new Job2());
t2.start();
t1.join();
t2.join();
}
class Job1
{
public void run()
{
task1;
}
}
class Job2
{
public void run()
{
task1;
}
}
Run Code Online (Sandbox Code Playgroud)
}
当我尝试使用createQuery()运行HQL查询时,我正在努力找到空指针异常的底部.
运行查询的代码非常简单.最初我有一个我正在调用的命名查询,但只是为了使事情变得更简单并消除我正在做的任何复杂情况(springwildlife是包,而Species是类/实体):
Query q = session.createQuery("SELECT s FROM springwildlife.Species s");
Run Code Online (Sandbox Code Playgroud)
(顺便说一下:我也曾尝试使用和不使用包名.我还尝试过更简单的"FROM springwildlife.Species"查询)
我已经创建了一个XML映射(species.hbm.xml),如下所示:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="springwildlife.Species" table="species">
<id name="id" type="java.lang.Long" column="id" >
<generator class="native">
<param name="sequence">species_id_seq</param>
</generator>
</id>
<!-- in the actual file I have one these for each item I want to be mapped -->
<property name="propertyFromClass" type="java.lang.String">
<column name="sql_table_column_name" />
</property>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
在我的hibernate.cfg.xml文件中,我像这样拉入映射:
我的类/实体看起来像这样:
package springwildlife;
public class Species
{
// properties here
public Species()
{
}
// …Run Code Online (Sandbox Code Playgroud) 我需要从字符串中删除一些无效字符,并编写StringUtil库的以下代码部分:
public static String removeBlockedCharacters(String data) {
if (data==null) {
return data;
}
return data.replaceAll("(?i)[<|>|\u003C|\u003E]", "");
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试文件illegalCharacter.txt,里面有一行:
hello \u003c here < and > there
Run Code Online (Sandbox Code Playgroud)
我运行以下单元测试:
@Test
public void testBlockedCharactersRemoval() throws IOException{
checkEquals(StringUtil.removeBlockedCharacters("a < b > c\u003e\u003E\u003c\u003C"), "a b c");
log.info("Procesing from string directly: " + StringUtil.removeBlockedCharacters("hello \u003c here < and > there"));
log.info("Procesing from file to string: " + StringUtil.removeBlockedCharacters(FileUtils.readFileToString(new File("src/test/resources/illegalCharacters.txt"))));
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
INFO - 2010-09-14 13:37:36,111 - TestStringUtil.testBlockedCharactersRemoval(36) | Procesing from string directly: hello here and there
INFO …Run Code Online (Sandbox Code Playgroud) @ThreadSafe
public class SynchronizedInteger {
@GuardedBy("this") private int value;
public synchronized int get() { return value; }
public synchronized void set(int value) { this.value = value; }
}
Run Code Online (Sandbox Code Playgroud)
这本书说:
考虑volatile变量的好方法是想象它们的行为大致类似于清单3.3中的SynchronizedInteger类,用get和set调用替换volatile变量的读写.
......
这个比喻并不准确; SynchronizedInteger的内存可见性效果实际上比volatile变量略强.见第16章.
我检查了第16章,但没有找到确切的答案 - 内存可见性保证的确切程度如何更强?
java ×6
spring-mvc ×5
spring ×4
hibernate ×2
character ×1
concurrency ×1
escaping ×1
forms ×1
interceptor ×1
jsp-tags ×1
regex ×1
servlets ×1