我目前正在尝试使用Bootstrap 4/Angular 4创建一个简单的登录表单.事情是,我的HTML模板基于https://angular.io/docs/ts/latest/guide/forms.html上提供的文档,如果输入为空,我无法获取错误消息.这是我到目前为止:
<label>User Name:</label>
<input id="name"
#name
placeholder="user name"
class="form-control mb-md-3"
(keyup.enter)="login(name.value, password.value)"
name="username"
required>
<div [hidden]="!name.valid || !name.pristine"
class="alert alert-danger">User name is required</div>
Run Code Online (Sandbox Code Playgroud)
我不确定我是否需要对模型或任何东西进行双向绑定,我不完全理解文档.如果它有帮助,我确实有一个课程:
export class User {
constructor(
public id: number,
public name: string,
public password: string
) {}
}
Run Code Online (Sandbox Code Playgroud)
此外,目前这不是服务或任何东西,它只是一个支持路由的小型演示屏幕.
我知道这个问题经常被问到,但也许我有一些特别的事情。我正在尝试对支持 REST(不是 Spring MVC)的 Spring Boot 应用程序进行一些集成测试,并且由于某种原因SecurityContextHolder.getContext().getAuthentication()总是返回 null,即使在@WithMockUser测试中使用也是如此。我不确定这是否与在配置类上使用配置文件有关,但到目前为止我们还没有遇到任何问题。
@Override
public ResponseEntity<EmployeeDTO> meGet() {
Principal principal = SecurityContextHolder.getContext().getAuthentication();
logger.debug("Endpoint called: me({})", principal);
EmployeeDTO result;
// Get user email from security context
String email = principal.getName(); // NPE here
// ...
}
Run Code Online (Sandbox Code Playgroud)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
properties = {"eureka.client.enabled:false"})
@WithMockUser
@ActiveProfiles(value = "test")
public class MeControllerTest extends IntegrationSpringBootTest {
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private SecurityContext securityContext;
@MockBean
private Authentication authentication;
@MockBean
private EmployeeRepository employeeRepository;
@BeforeClass …Run Code Online (Sandbox Code Playgroud) 我正在学习 Turbo Frames 和 Streams + Stimulus,所以我可能没有 100% 步入正轨。我有一个用于创建新对象的表单,但在表单中我希望有一个选择组件,该组件将根据选择显示某些字段。值得注意的是,因此,在用户做出此选择之前我不想提交表单。
这就是我所拥有的:
<div class="form-group mb-3">
<%= form.label :parking, class: 'form-label' %>
<%= form.number_field :parking, class: 'form-control' %>
</div>
<%= turbo_frame_tag "turbo_transactions" do %>
<%= render 'property_transactions' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
<div class="form-group mb-3" data-controller="property-transaction">
<%= label_tag :property_transactions, 'Property in:', class: 'form-label' %>
<%= select_tag :property_transactions, options_for_select(@property_transactions.collect {|p| [p.name, p.id]}), { data:
{ action: "property-transaction#redraw", property_transaction_target: 'transaction', turbo_frame: 'turbo_transactions' },
class: 'form-control', prompt: '', autocomplete: 'off' } %>
</div>
<% if …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Jersey 2.13作为服务器进行小型REST服务,将Vaadin 7.3.3作为"客户端",但想法是请求可以来自任何地方(不仅仅是Vaadin,这就是为什么我不使用在请求时间的bean).假设用户已经注册,请求只检查他是否存在,并返回令牌.我有一个POST URL,https://localhost:8443/logins收到
{
"login-request":
{
"username":<insert username>,
"password":<insert password>
}
}
Run Code Online (Sandbox Code Playgroud)
并返回:
{
"login-token":
{
"token":<insert token>
}
}
Run Code Online (Sandbox Code Playgroud)
我的客户请求代码是:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://127.0.0.1:8443/").path(appName + "/logins");
//build JSON Object
HashMap<String, String> userMap = new HashMap<>();
userMap.put("username", user.getUsername());
userMap.put("password", user.getPassword());
//JSON logins request!
JSONObject jsonLoginRequest = new JSONObject();
try {
jsonLoginRequest.put("login-request", userMap);
} catch (JSONException e) {
e.printStackTrace();
}
return target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(jsonLoginRequest.toString()));
Run Code Online (Sandbox Code Playgroud)
服务器处理代码是:
@POST
@Path("logins")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response generateToken(@Context HttpServletRequest request) {
if …Run Code Online (Sandbox Code Playgroud) 我知道分页在某种程度上违反了反应性原则,但由于要求,我必须使其以某种方式工作。我正在使用 Spring Data 2.1.6 并且无法升级,因此ReactiveQuerydslSpecification动态查询是不可能的。我想我可以使用ReactiveMongoTemplate所以我想出了这个:
public interface IPersonRepository extends ReactiveMongoRepository<Person, String>, IPersonFilterRepository {
Flux<Person> findAllByCarId(String carId);
}
public interface IPersonFilterRepository {
Flux<Person> findAllByCarIdAndCreatedDateBetween(String carId, PersonStatus status,
OffsetDateTime from, OffsetDateTime to,
Pageable pageable);
}
@Repository
public class PersonFilterRepository implements IPersonFilterRepository {
@Autowired
private ReactiveMongoTemplate reactiveMongoTemplate;
@Override
public Flux<Person> findAllByCarIdAndCreatedDateBetween(String carId, PersonStatus status,
OffsetDateTime from, OffsetDateTime to,
Pageable pageable) {
Query query = new Query(Criteria.where("carId").is(carId));
if (status != null) {
query.addCriteria(Criteria.where("status").is(status));
}
OffsetDateTime maxLimit = OffsetDateTime.now(ZoneOffset.UTC).minusMonths(3).withDayOfMonth(1); // beginning …Run Code Online (Sandbox Code Playgroud) angular ×1
bootstrap-4 ×1
java ×1
javascript ×1
jax-rs ×1
jersey-2.0 ×1
json ×1
junit4 ×1
mockito ×1
rest ×1
spring ×1
spring-test ×1
stimulusjs ×1
turbo-frames ×1